目录
1.算术操作符
算术操作符是我们最常用的操作符:+ - * / %
- 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于 / 操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法。
- % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
2.移位操作符
移位操作符分为左移操作符和右移操作符,移位操作符的操作对象只能是整数,且所谓的移位是对于整数的二进制位进行移位:
左移操作符:<<(左边丢弃,右边补0)
右移操作符:>>
算术右移:右边丢弃,左边补符号位
逻辑右移:右边丢弃,左边补0(具体是算术右移还是逻辑右移是取决于编译器)
Visual Studio 的右移是算术右移
例如:
其中 i = 6的
二进制数为 0000 0000 0000 0000 0000 0000 0000 0110(一个字节占32个bite位)(正数原码,反码补码相同)由于 << (左移位操作符)的影响,
j = i << 1 的
二进制变为 0000 0000 0000 0000 0000 0000 0000 1100 ,j 的值就变为了12;
其中 i = - 6的二进制数的
原码为: 1000 0000 0000 0000 0000 0000 0000 0110
反码为: 1111 1111 1111 1111 1111 1111 1111 1001
补码为: 1111 1111 1111 1111 1111 1111 1111 1010
由于 >> (右移位操作符)的影响,
j = i >> 1 的二进制
补码:1111 1111 1111 1111 1111 1111 1111 1101
反码:1111 1111 1111 1111 1111 1111 1111 1100
原码:1000 0000 0000 0000 0000 0000 0000 0011
j = -3。
注意:对于位移操作符没有移动负位的说法,
例如:int num = 5;
num << -1 //error
3.位操作符
位操作符分为:
& : 按(二进制)位与 (对应的二进制位,只有2个都为1,最终才为1)
| :按(二进制)位或 (对应的二进制位,只要有一个为1,最终也为1)
^ : 按(二进制)位异或 (对应的二进制位,相同为0,相异为1)
注:它们的操作数是整数
其中 -5的补码为 : 1111 1111 1111 1111 1111 1111 1111 1011
6的补码为: 0000 0000 0000 0000 0000 0000 0000 0110
c = a&b 为: 0000 0000 0000 0000 0000 0000 0000 0010
所以c的原码也为:0000 0000 0000 0000 0000 0000 0000 0010 c = 2;
m =a | b为: 1111 1111 1111 1111 1111 1111 1111 1111
所以m的原码为:1000 0000 0000 0000 0000 0000 0000 0001 m = -1;
n = a ^ b为: 1111 1111 1111 1111 1111 1111 1111 1101
所以n的原码为: 1000 0000 0000 0000 0000 0000 0000 0011 n = - 3
4.单目操作符
对于 !操作符 :
!(0)返回1;
!(非0)返回0.
对于 sizeof
sizeof(数组名)—— 数组名表示整个数组,计算的是整个数组的长度,单位是字节
注: sizeof 中的表达式不参与计算
在本代码中:sizeof 中的 b = a + 12并没有去影响实际的 b 的值,
说明sizeof中的表达式是不参与运算的。
~ 操作符:
将二进制数按位取反,如:
0000 0000 0000 0000 0000 0000 1100 0011
按位取反后:1111 1111 1111 1111 1111 1111 0011 1100
5.逗号表达式
逗号表达式,就是用逗号隔开多个表达式,如:
int a = 3, b = 5;
int c = (a > b, a = b + 5, a , b = a - 1 ); //逗号表达式
逗号表达式,从左往右依次计算,整个表达式的结果是最后一个表达式的结果
这个代码最终的 c 的值为 9;