C语言操作符总结

C语言——操作符详解(超详细)! 九、位操作符。 阅读详情

今天分享一个自己刚整理完的C语言操作符的知识点

C语言基本操作符分为以下几类:

  1. 算术操作符
  2. 移位操作符
  3. 位操作符
  4. 赋值操作符
  5. 单目操作符
  6. 关系操作符
  7. 逻辑操作符
  8. 条件操作符
  9. 逗号表达式

算术操作符

+      -       *       /       %

1.除"%“外其他几个操作符均可用于整数和浮点数。
2.对于”/"来说,计算的两个数为整数则执行整数除法,若含有浮点数,则执行浮点数除法。
实例演示:

double a = 4.5;
int b = 3;
int c = 5;
printf("%d\n",c%b);
printf("%.3lf\n",a/c);
printf("%d\n",c/b);

结果为2;0.900;1


移位操作符

<<左移操作符              >>右移操作符

例子:有符号数
逻辑右移1位:1000 0001 -> 0100 0000 依次右移,最低位移出,最高位补0。(逻辑左移和他一样的方法)
算术右移1位:1000 0001 -> 1100 0000 依次右移,最低位移出,最高位补符号位的数字1。
算术左移1位:1000 0001 -> 1000 0010 依次左移,最高位符号位保持不变,最低位补0。
注:移位操作符右边的数字不能为负数!


位操作符

&       按位与
|       按位或
^       按位异或

注:他们的操作数必须是整数

&:就是先转化为二进制数进行 & 操作,有0则为0,全1为1
| :就是先转化为二进制数进行 | 操作,有1则为1,全0为0
^:就是先转化为二进制数进行 ^ 操作,相同为0,不同为1

int num1 = 1;    
int num2 = 2;    
printf("%d\n",num1 & num2);    
printf("%d\n",num1 | num2);    
printf("%d\n",num1 ^ num2);

结果为 0;3;3
两个比较经典的 ^ 操作符使用实例:
1.不允许建立临时变量,完成两个数的交换。

#include <stdio.h> 
int main() 
{    
   int a = 10;    
   int b = 20;    
   a = a^b;    
   b = a^b;    
   a = a^b;    
   printf("a = %d  b = %d\n", a, b);    
   return 0; 
}

2.求一个整数存储在内存中的二进制中1的个数

#include <stdio.h> 
int main() 
{    
    int num = -1;    
    int i = 0;    
    int count = 0;//计数    
    while(num)
    {        
        count++;        
        num = num&(num-1);    
    }    
    printf("二进制中1的个数 = %d\n",count);    
    return 0; 
} 

这个解法可能一般是想不到的,但是这样做就很巧,因为一个数他如果不为0,那么他的二进制序列里一定含有1,这样就只需要,用他和自身-1的&值是否为0来判断,这样做是一个目的那就是每次都消掉二进制序列里最右边的1,每消掉一个count就++,这样循环几次后结果为0,不满足条件退出循环后的count结果则是二进制序列中1的个数。


赋值操作符

int a = 10;
int b = 20;
上面的 “=” 就是赋值操作符,可千万不要理解为等于的意思
还有一系列的复合赋值符:
+=   -=   *=   /=  %=  >>=  <<=  &=  |=   ^=

单目操作符

!                      逻辑反操作
-                       负值
+                       正值
&                       取地址
sizeof                 操作数的类型长度(以字节为单位) 
~                      对一个数的二进制按位取反
--                     前置,后置 --
++                     前置,后置++
*                      间接访问操作符(解引用操作符)
()                     强制类型转换

操作实例:

#include<stdio.h>
int main()
{
    int a = -10;
	int b = 20;
	int *ptr = NULL;
	printf("%d\n", !5);
	printf("%d\n",!0);
	a = -a;
	printf("%d\n", a);
	ptr = &a;
	printf("%d\n",*(ptr));
	double d = (double)b;
	printf("%.2lf\n",d);
	printf("%d\n",sizeof(a));
	printf("%d\n",sizeof(ptr));
	int c = b++;
	printf("%d %d\n",c,b);
    return 0;
}

运行结果如下图

1.&是获取变量a在内存中的地址。
2.*(ptr)是对指针进行解引用,获取其所存的值。
3.强制类型转换,有一点就是大范围向小范围转换时精度会损失。
4.不管什么类型的指针永远都是4个字节。
5.拿上面的代码来说不管前置还是后置++,b的值最终都是21,b都会+1,
  但是对于c的值来说如果是++b的话,c的值就是21,因为他会先将b++再
  赋给c,但是是b++的话,c的值就是20,因为他会先把b的值赋给c,再将
  b的值++。

关系操作符

>                大于
>=               大于等于
<                小于
<=               小于等于
!=               不等于
==               等于

关系运算符都很简单就没什么可讲的了,但有一点需要注意就是一定要把赋值符 “ = ” 和 关系操作符 “ == ” 区分开,不要混为一谈。


逻辑操作符

&&                 按位与
||                 按位或

这里要区分开 “&&” 和 “ & ” ,“ || ” 和 “ | ”
举个例子:

&&:计算原则是只要有一边为false则结果为false,两边全为true则结果为true。
1&&2  -> 在计算时首先将1和2转化为Boolean型,非0的数,则为1(true),
         0则为0(false),所以转化后为 true&&true -> true ->1。
1&2  -> 在计算时首先将1和2转化为二进制数,然后按位进行与操作,有0则为0
        全1则为1,转化后为 01^10 -> 00 ->0。
||:计算原则为操作符两边有1则为1,全0为0。
    这两个结果是不相同的,虽然中间的某些步骤是一样的,所以在遇到此类问题时一定要细心!

区别:

&&和||是短路运算符,
&和|是非短路运算符;
&&和||运算符第一个表达式不成立的话,后面的表达式不运算,直接返回。而&和|对所有表达式都得判断.


条件操作符

exp1 ? exp2 : exp3
   这是一个三目运算符,算是挺实用的一个,他的运算规则是先判断exp1的条件是否为真
为真的话则执行exp2,为假则执行exp3,他和一个if条件语句等价。

逗号表达式

exp1, exp2, exp3, …expN
   逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左向右依次执行。
整个表达式的结果是最后一个表达式的结果 。
这个表达式可能见到的少一些,但是如果遇到的话要知道他怎么算的。

举个例子:

#include<stdio.h>
int main()
{
    int a = 1; 
	int b = 2; 
	int c = (a>b, a = b + 10, a, b = a + 1); 
	printf("%d",c);  
    return 0;
}

结果为13,因为执行到最后一条语句的时候,a已经等于12了,然后再执行b=a+1,所以b=13。

C语言操作符详解 C语言操作符详解,位运算,运算符,sizeof和数组,访问结构体成员 阅读详情

相关推荐

拆开华为BBU5900,看看5G基站的大脑里到底装了啥?

本文深度拆解华为BBU5900,揭示5G基站核心处理单元的硬件架构与设计哲学。通过详细解析模块化设计、智能电源系统和动态散热方案,展现其支撑千兆速率、毫秒级时延的技术奥秘,为5G网络部署提供实用参考。

weixin_31456563的博客 562

c语言操作符(超详解)

详细操作符解析(包含运算顺序表)

m0_73790767的博客 3049

Pwntools不只是PWN:用它写个自动化Fuzz脚本,挖掘Linux命令行工具漏洞

本文探讨了如何利用Pwntools构建自动化Fuzz脚本,挖掘Linux命令行工具中的漏洞。通过详细的代码示例和实战案例,展示了Pwntools在Fuzzing中的高效性和灵活性,特别适合快速验证特定场景的安全问题。文章还提供了进阶技巧和避坑指南,帮助安全研究人员快速上手并提升测试效率。

weixin_28718345的博客 221

C语言基础:操作符详解,看这一个就够了!(内含详细图解)

C语言中的操作符主要可以分为10个类型,这篇文章将带你详细了解各操作符的使用方法,希望能对你有帮助~

linsc_05的博客 6013

计算机补码两位乘法移位补0还是1,补码两位乘.doc

补码两位乘沈阳航空航天大学课 程 设 计 报 告课程设计名称:计算机组成原理课程设计课程设计题目:COP2000实现补码两位乘法院(系):计算机学院专 业:计算机科学与技术(嵌入式系统方向)班 级学 号:2009040101181姓 名:张驰指导教师:杨华完成日期:2012年1月14日目 录第1章 总体设计方案11.1设计原理11.2设计思路11.3设计环境2第2章...

weixin_34471838的博客 967

软件自动化测试脚本如何编写,编写自动化测试脚本的几点注意事项

我们需要自动化测试脚本的原因:1、验收测试是一项非常复杂和费力的被用来确保软件质量的环节。它的目的就是使软件能得到充分运行并且能使其符合原始需求。2、测试的目的无非就是满足了两个结果:测试通过或测试不通过。为了能实现每个测试结果,必须要明确每个测试用例。并且对于整个系统而言在合同中必须定义测试用例的失败标准,而且这个失败标准数必须是可接受的。3、测试用例的通过条件必须有一个清晰的标准,标准可以被定...

weixin_39575775的博客 2251

C语言——操作符(详解)

C语言中所有操作符详解

sinzz的博客 3251

Obsidian和Typora图片路径同步终极指南:告别混乱的assets文件夹

本文详细解析了Obsidian与Typora图片路径同步的终极解决方案,通过Custom Attachment Location插件实现动态路径管理,解决了两款工具间图片兼容性问题。文章提供了从基础配置到高级应用的完整指南,帮助用户告别混乱的assets文件夹,提升工作效率。

g9h0i1的博客 822

C语言操作符(万字全收录!全解析!)

代码1:变量的定义。

yue_2899799318的博客 2990

大模型部署之二--vllm+docker部署

本文介绍了在openEuler系统上快速本地部署Qwen3-8B、DeepSeek-R1、Qwen2.5deng 大模型的完整流程。通过modelscope管理模型,采用vllm+docker模式实现部署。主要步骤包括:1)安装conda环境;2)配置docker;3)下载模型;4)编写docker compose配置文件;5)启动服务。特别针对2卡4090服务器提供了参数配置建议,并给出常用命令和参考资料。文档还提示不同系统和平台可能存在差异,为开发者提供了本地部署大型语言模型的实用指南。

weixin_39279863的博客 1133

window下移动设备/硬盘报错位置不可用

移动硬盘指示灯亮,但电脑上不显示 报错信息 : 无法访问E:\。参数错误。 报错原因: 移动硬盘打不开提示参数错误,是因为这个H盘的文件系统内部结构损坏导致的。要怎么恢复里面的数据呢? https://jingyan.baidu.com/article/cb5d6105a80242005c2fe0c3.html 解决办法 : 不用格式化修复方法 方法一: 1、单击–开始–运行–输入cmd; 2、...

qq_40907977的博客 4928

C语言——操作符详解

目录 操作符分类: 1、算术操作符 2、位操作符 3、赋值操作符 4、单目操作符 5、关系操作符 6、逻辑操作符 7、条件操作符 8、逗号操作符 9、下标引用、函数调用和结构成员 1、算术操作符 + - * / % % 是取模操作符,意思就是 求余数。 int ret = 10 % 3; //求10 % 3的余数,得出的余数是1 printf("%d\n", ret); 注意的是:% .........

weixin_57525369的博客 7553

【OpenClaw企业级智能体实战】第13篇:1+N架构实战!OpenClaw多Agent数字员工军团搭建指南(含完整配置+路由策略+代码落地)

单Agent因“记忆负担重、Token消耗高、响应不精准”已难以满足复杂场景需求,而多Agent团队通过“1个编排者+N个执行者”的分工协作模式,能让效率提升300%以上。本文基于OpenClaw 2026稳定版,结合阿里云开发者社区实战案例,从核心认知、准备工作、实操流程、协作机制、安全配置五大维度,完整拆解多Agent团队搭建全流程。文中包含可直接复制执行的代码、详细配置模板、路由策略设置及常见问题排查,新手可在1-2小时内落地属于自己的“数字员工”军团,覆盖内容创作、技术支持、多平台运营等多场景。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 745

C语言操作符汇总

C语言的操作符分为以下10种: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 一、算术操作符 + - * / % 1.+ - * / 操作符可以作用于整数和浮点数; 2.%操作符只能用于两个整数之间,返回的是整除之后的余数; 3./ 操作符则是根据两操作数类型进行除法,如两个操作数是整型,执行整数除法,如果两数为浮 点型,则执行..

Lumos_1的博客 4291

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【C语言】玩转操作符——操作符的那些东西!

文章目录前言一、C语言中的操作符二、操作符详细介绍1.算术操作符2.移位操作符2.1移位操作符2.1.1左移操作符2.1.2右移操作符3、位操作符3.1位操作符的分类总结 前言 是否能很好的理解的操作符的意思,决定着我们能否很好的理解代码。在一些相对复杂的程序中,不能搞懂操作符,我们将一筹莫展。因此,本文耗费三天的准备才行文,希望对大家有帮助! 提示:以下是本篇文章正文内容 一、C语言中的操作符 C语言提供了以下的操作符(有的地方也称为运算符) 运算操作符 + ,-,*,/,%,++,– .

weixin_46913665的博客 3273

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C语言——操作符

用于将两个数相加,例:3 + 3结果为6。

Stewie Lee的博客 3943

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【c 语言】算术操作符详解

本博客将详细解析C语言中的各类算术操作符,包括加法、减法、乘法、除法、取模以及增量与减量操作符,通过示例与解释帮助读者深入理解其用法,同时提醒注意事项,避免在实际编程中踩坑。通过掌握这些操作符的使用技巧,您将能够编写出更加高效、准确的C语言代码。

m0_74195174的博客 2311

C语言各种操作符详细解析

大家好,本文主要内容是C语言操作符的介绍,C语言有很多的操作符,学好这些操作符可以提高我们的编程水平。

qq_74078075的博客 2024

【 c 语言 】赋值操作符详解

本篇博客将带领大家逐步深入赋值操作符的各个方面,从基本概念到基本用途,再到复合赋值操作符的详细解析,全方位解析C语言中的赋值操作符

m0_74195174的博客 3785

C语言 操作符

本文详细介绍了C语言的操作符,并加入了一些案例。

qq_58094522的博客 1586

C语言初阶——操作符

在C语言中,算术操作符是用来执行基本数学运算的符号,包括加法、减法、乘法、除法以及取模(求余数)等。这种操作符有两个操作数,位于操作符两端的数字就是操作数,这种操作符也叫双目操作符。运行结果为:在计算机中执行算数运算一个不可避免的话题是操作精度问题,如果将一个浮点数和整数进行运算,结果将会是一个浮点数。浮点数可以表示小数部分而整数不可以,因此直接将一个浮点数的结果存储到整型变量中是不可行,这会导致数据丢失——浮点数的小数部分会直接被截断。

qq_55890817的博客 1718

【C语言】操作符详解

原来这才是最详细的C语言操作符部分的内容,你学会了吗?

qq_63320529的博客 944

C语言中操作符详解

C语言中各种操作符的具体用法,代码演示。

hihahahahah的博客 1490

c语言操作符

实例 1 中的 a,b 要进行整形提升,但是 c 不需要整形提升 a,b 整形提升之后,变成了 负数,所以表达式 a==0xb6 , b==0xb600 的结果是假,但是 c 不发生整形提升,则表达式 c==0xb6000000 的结果是真。如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。(有 1 则为 1,都为 0 才 0)(右移的特征:用来倍减,除以 2^n,n 为移动的数值,若除后为整数【取整】,若不为整数【取不超过其自身的最大整数】)

lhnxkwj的博客 1091
上一篇: C语言操作符涉及的二进制序列问题
下一篇: 二进制序列翻转求和问题
Python_programer
博客等级 码龄9年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值