5的原码(5的二进制):00000101
反码(取反,0变1,1变0):11111010
补码(在反码的基础上末位加1):11111011
5对应的补码:11111011
-5的原码是(位首是符号位1,表示负数):10000101
-5对应的补码(末尾减1然后取反得到对应的反码,符号位不变);11111011
高位0表示正数,高位1表示为负数
左移<<
a=5,a<<2=20
5的二进制:00000101,整体左移两位,低位补0,得二进制00010100。不溢出的情况下(int 32位,左移过多可能导致高位溢出)左移n位
移动后结果等于a*2的n次方
a=-5,a<<1=-10
-5的二进制原码:10000101,对应的补码(原码减1取反):11111011,整体左移1位,低位补0,得二进制补码11110110。
通过补码11110110取反然后末尾加1换算成原码:10001010。所有-5左移1位等于-10
移动后结果=a*2的n次方
右移>>
a=5,a>>2=1
5的二进制:00000101,整体右移两位,高位补0,得二进制00000001。
移动后结果等于a/2的n次方。
a=-5,a>>1=-3
-5的二进制原码:10000101,对应的补码(原码减1取反):11111011,整体右移1位,高位补1(负数右移高位补1),得二进制补码11111101。
通过补码11111101取反然后末尾加1换算成原码:10000011。所有-5右移两位等于-3
移动后结果等于(a/2的n次方)—1。
正数右移高位补0,负数右移高位补1
无符号右移>>>
不管是正数还是负数,右移后高位都补0。
异或运算"^":两个运算符相同则是0,不相同则是1
或运算"|":两个运算符只要有一个为1则结果为1
按位与"&":两个运算符都为1则是1,有一个不为1则是0