a ^ b a|| b a & b a b
1 1 0 1 0
0 1 1 1 1
0 0 0 0 0
1 1 0 0 1
101000001
~101000001
结果 010111110
正数符号位是0,负数符号位是1
左移一位 可以等价 x2
右移一位 可以等价 /2
正数来说,最高位是0,其余各位代表数值本身的二进制数;
对于负数来说,把该数的绝对值的补码按位取反,然后对整个数+1,取得该数的补码。如-1的补码为11111111,-1的绝对值补码是00000001,按位取反11111110,再加1,11111111
左移运算符(<<)会左操作数向左迁移,迁移的位数由右操作数决定(左移后,低位补0)a=a<<2,使a的各个二进制位左移2位,右补0,若a=00001111则a<<2=00111100,高位左移后溢出的位舍弃掉了在不产生溢出的情况下,左移一位相当于乘2,用这种方法来实现乘法,要比乘法运算快很多
右移运算符先会采用一种叫符号扩展的措施:如果原值为正数,高位补0;如果原值为负数,则高位补1