目录
1.算术操作符
- / 取商,不会得出小数
- % 两端不能有浮点数,char也行,因为内存中存的是ASCII码
- / 想要得到小数,两端最起码有一个浮点数
2.移位操作符
- 移位操作符:移动的是二进制位、移动补码、作用于整数
- 对于移位操作符,不要移动负数位,这个是C语言标准未定义的
右移操作符:
- 算术右移:右边丢弃,左边补符号位
- 逻辑右移:右边丢弃,左边补0
左移操作符:
- 左边丢弃,右边补0
- 整数的二进制表示:原码、反码、补码
- 内存中存储的是补码
- 正数的原码、反码、补码相同
- 原码符号位不变,其余位取反变成反码,反码+1变成补码
- 从补码求原码,(看最高位)正数补码就是原码。负数,补码再取一次补码就成原码
3.位操作符
- 操作的是二进制位、原码
- 异或:相同为0,相异为1
编程题:不使用第三方变量,交换两个int的值
编程题:统计num补码中有多少个1
- 这种算法不能实现负数的补码
- 但是这种算法可实现十进制转二进制
算法修改:
4.赋值操作符
- 赋值操作符:=
- 赋值操作符:包括复合赋值符 += 之类的
5.单目操作符
- 单目操作符:只有一个操作数
- int [10]:是数组的类型
- 当是变量的时候sizeof a 括号可以省略
![]()
- 结果是2 0
- 先是把a+5的整型放到short短整型里面会截断,按照short的类型来
- sizeof 里面的表达式是不参与运算的,所以s还是0
6.关系操作符
7.逻辑操作符
练习题:
- 第一个答案:1 2 3 4 // a是0,先使用在++,与运算短路,后面不在运算,所以bcd还是原来的值。因为a++为1了,所以结果1234
- 第二个答案:1 3 3 4 // a是0,先使用在++,或运算没有出结果继续运算,b先++是3为真,或运算短路,后面不在计算,所以结果是1334
8.条件操作符(三目操作符)
- exp1条件判别式为真:结果为exp2表达式的结果
- exp1条件判别式为假:结果为exp3表达式的结果