操作符构架图:
-
算数操作符
常见的算术操作符:
加(+)、减( - )、乘( * )、除( / )、取模( % )
注意事项:
1.1 取模( % ) 操作符不能作用于 浮点数外,其余的几个操作符可以作用于 整数 和 浮点数
1.2 对于除( / )操作符,如果两个操作数都是 整数,则执行整数除法。而只要两个操作数中有 浮点数 ,那么就执行的是浮点数除法。
1.3 取模( % ) 操作符作用的两个操作数 都 必须为 整数 。返回的是整除后的余数。即:% 只能对于整数取模!(如:9 % 3 == 0)(而:9.0 % 3 .0 == 0.0 是错误的)
注:算术操作符的操作数为2 -
移位操作符
移位操作 就是对操作数的二进制码进行左(右)移位操作
常见的移位操作符:
左移操作符( >> ) 、右移操作符( >> )
左移操作符
把 num左移 n 位:num << n;
移位规则:
左边抛弃,右边补0。
如:
右移操作符
把 num 右移 n 位:num >> n;
移位规则:
首先,右移运算分为两种:逻辑移位 和 算术移位。
1、逻辑移位
右边抛弃,左边补 0。
如:
2、算术移位
右边抛弃,左边用原该值的符号位填充。
由于一个数可能是正数也可能是负数,所以在进行移位操作时一定要保持它的正负不变。
这里我们必须知道:1. 数字在内存中的存储方式是以 二进制 的 补码 进行存储的,运算的时候也是用 补码 进行运算的。2. 正数的 原码 和 补码 相同,负数的 补码 是 原码除符号位以外的其他位按位取反再加 1 得到的。3. 正数符号位是0,负数符号位是 1。
以右移一个负数为例:
总结:
把一个数像左移动 n 位,相当于给这个数 乘以 2^n;
把一个数向右移动 n 位,相当于给这个数 除以 2^n。
警告!对于移位运算符,一定不要移动负数位,这个是标准未定义的。
如:int num = 10; num >> -1; //是一个错误代码
-
位操作符
按位与( & )、按位或( | )、按位异或( ^ )
注: 他们的操作数必须是整数。
运算法则:
按位与( & ): 参加运算的两个数,按二进制位进行 “按位与” 运算
0 & 0 = 0,0 & 1 = 0,1 & 0 = 0,1 & 1 = 1
即:两位同时为 1 时,结果才为 1 ,否则结果为 0。
按位或( | ): 参加运算的两个数,按二进制位进行 “按位或” 运算
0 | 0 = 0,0 | 1 = 1,1 | 0 = 1,1 | 1 = 1
即:两位同时为 0 时,结果才为 0 ,否则结果为 1。
按位异或( ^ ): 参加运算的两个数,按二进制位进行 “按位异或”运算
0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 1
即:两位相同时异或结果为 1,两位结果不相同时异或结果为 0。 -
赋值操作符( = )
简单的说就是可以给自己重新赋一个自己满意的值。
复合赋值
常见的复合赋值操作符:
+= 例:a = a + 10,就相当于 a += 10;
-= 例:a = a - 10 ,就相当于 a -= 10;
*= 例:a = a * 10,就相当于 a *= 10;
/= 例:a = a / 10,就相当于 a /= 10;
%= 例:a = a % 10,就相当于 a %= 10;
&= 例:a = a & 10,就相当于 a &= 10;
|= 例:a = a | 10,就相当于 a |= 10;
^= 例:a = a ^ 10,就相当于 a ^= 10;