当前位置: 首页 > news >正文

C语言运算符笔记


赋值运算符

将不满意的值赋值为自己满意的值,赋值运算符可以连续使用(链式赋值)。
示例:
int a=10;
int x=0;
int y=20;
a = x = y + 1; // 链式赋值
复合赋值符

+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=

单目/双目运算符

• 单目运算符:只有1个操作数

• 双目运算符:有2个操作数

常见单目运算符

1. !:逻辑反操作(真→假,假→真)
示例:
int main()
{
int flag = 3; // 0为假,非0为真
if (flag) // flag为真,进入if
{}
if (!flag) // flag为假,进入if
{}
}
2. -:负值

3. +:正值

4. &:取地址(int *p = &a; // p是指针变量)

5. sizeof:操作数的类型长度(以字节为单位)
示例:
int main()
{
int a = 10;
int n = sizeof(a); // 计算变量a所占内存大小,单位为字节
int n = sizeof(int); // 计算int类型所占内存大小
// sizeof是运算符,计算变量/类型创建的变量所占内存空间大小
printf("n = %d\n", n);
return 0;
}
位运算符

按位与 &

规则:对应二进制位都为1则为1,否则为0。
示例:
int main()
{
int a = 3; // 整数占4字节,1字节=8比特位
int b = -5;
int c = a & b;
// 3的补码:00000000 00000000 00000000 00000011
// -5的补码:11111111 11111111 11111111 11111011
// 按位与结果:00000000 00000000 00000000 00000011 → 十进制3
printf("c = %d\n", c); // 输出c=3
return 0;
}
按位异或 ^

规则:对应二进制位相同为0,相异为1。
特性:

• 3^3=0 → a^a=0

• 0^5=5 → 0^a=a

• 3^3^5=5、3^5^3=5(异或满足交换律)

异或交换变量示例:
int main()
{
int a = 3;
int b = 5;
printf("交换前:a=%d b=%d\n", a, b);
a = a ^ b; // a=3^5
b = a ^ b; // b=3^5^5 → b=3
a = a ^ b; // a=3^5^3 → a=5
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
移位运算符

1. 左移 <<:左边丢弃,右边补0。
示例:

◦ a=7,b=a<<1 → 二进制左移1位,结果为14(7*2=14)

◦ a=-7,b=a<<1 → 补码左移1位,结果为-14

2. 右移 >>:

◦ 算术移位:右边丢弃,左边补原符号位

◦ 逻辑移位:右边丢弃,左边补0

◦ 注意:移位运算符不要移动负数位

按位或 |

规则:对应二进制位有一个为1则为1,否则为0。

运算符分类

1. 算术运算符:+、-、*、/、%

◦ /:整型除法取整(1/2→0),浮点型除法保留小数(1.0/2→0.5)

◦ %:取模运算符两端必须是整数

2. 移位运算符:移动的是二进制位(不支持浮点数)

◦ 左移 <<

◦ 右移 >>

3. 位运算符:&(按位与)、|(按位或)、^(按位异或)

整数的二进制表示

整数的二进制有三种形式:原码、反码、补码,正数的原码、反码、补码相同,负数需要计算:

1. 原码:直接写出二进制,最高位为符号位(0正1负)

2. 反码:原码符号位不变,其他位按位取反

3. 补码:反码加1

4. 整数在内存中存储的是补码

示例(以-7为例,32位整型):

• 原码:10000000 00000000 00000000 00000111

• 反码:11111111 11111111 11111111 11111000

• 补码:11111111 11111111 11111111 11111001

内存大小说明

• 整型占4个字节,1字节=8比特位,4字节=32比特位

• 正数最高位为0,负数最高位为1

http://www.cnnetsun.cn/news/115355.html

相关文章:

  • Q学习(Q-learning)路径规划算法实战
  • ANSYS/LS - dyna防爆涂层砂浆砖框架结构爆破荷载损伤响应案例探索
  • 基于TOA/FOA的无源定位方法MATLAB仿真探索
  • 基于一致性算法改进的自适应虚拟阻抗控制:解决双机并联功率分布不均
  • springboot框架对接物联网,配置TCP协议依赖,与设备通信,让TCP变的如此简单
  • 微软和布朗大学最新发现:让AI助手拥有18000多种技能的革命性突破
  • MATLAB仿真:二维TOA传感器网络定位与时钟偏差拟合,最小二乘求解
  • 【参数辨识】基于卡尔曼滤波(KF)估计离散线性系统对垂直起降(VTOL)飞行器的鲁棒辨识附matlab代码
  • 桥梁与隧道安全守护者 抗冰冻型风速监测方案
  • 05-FreeRTOS的内存管理
  • 基于改进蛇优化算法(GOSO/ISO)优化随机森林数据回归预测模型(含初始化种群混沌映射、减法...
  • 基于大数据的人脸识别系统设计与实现开题报告
  • 车载 Android 系统稳定性问题全解析:从性能到黑屏的排查指南
  • 气象在线监测系统助力智慧环境管理,金叶仪器专业气象监测解决方案
  • 【TVM 教程】交叉编译与 RPC
  • 腾讯云国际站代理商的QAPM服务能提供哪些专属服务?
  • 网安副业怎么选?漏洞挖掘、技术博客、竞赛奖金实战,哪个更适配你?
  • 量子计算验证方法:软件测试从业者的转型指南
  • 突破 Oracle/MySQL 瓶颈:金仓数据库以三重革新,筑牢业务转型 “数据底座”
  • 【学习神器】NotebookLM“播客”功能实战指南:四六级、考研党高效复习秘籍
  • 如何解决 pip install 网络报错 ERROR: No matching distribution found for requests
  • 12 Ways to Find User Account Info and Login Details in Linux
  • 紧急警告:错误的导出格式正毁掉你的量子实验成果,速查正确方式
  • 35 岁职场焦虑蔓延?为什么网络安全行业越老越值钱?
  • 内网渗透实战干货:12 个优质靶场平台精选,附避坑指南 + 实操技巧合集!
  • 新型电力系统下多分布式电源接入配电网承载力评估方法研究附Matlab代码
  • 50天学习FPGA第16天-verilog的模块与端口
  • 50天学习FPGA第15天-verilog基本概念
  • 基于Docker容器化部署Lsky Pro私有图床系统
  • GRPO不香了?小米ICPO横空出世,专治大模型“不会思考”,推理能力飙升!