一、位运算一般用于2的次幂算法中,比乘除速度快
1、左移
比如:3<<1
将3的二进制数向左移1位,后面空缺补0------直接可运算为:3*2的1次幂 = 6
4<<2 就是4*2的2次幂=16
2、右移
比如:6>>1
将6的二进制数向右移1位,那么前面空缺的就补0或1,这取决于开始时最前面的那个数保持一致就可以,因为二进制中最前位0表示正数,1表示负数
6>>1 直接可运算为:6/2的1次幂 =
3
3、无符号右移
比如:6>>>1
将6的二进制数向右移1位,那么前面空缺的就补0
示例如下:
24<<3
:24的二进制是00000000 00000000 00000000 00011000,向左移3位且末尾需要0补齐空缺,00000 00000000
00000000
00011000000,十进制为192
可简化为 24*2的3次幂=192
6>>1 : 6的二进制是 00000000 00000000
00000000 00000110,向右移1位且保持最高位数不变, 000000000 00000000 00000000
0000011,十进制为3
可简化为
6/2的1次幂 = 3
24>>>3 : 24的二进制是00000000 00000000 00000000
00011000,向右移3位且最高位需要0补齐空缺, 00000000000 00000000 00000000 00011
,十进制为3
二、负数的二进制表示:
以正数的补码形式表示
补码:原码转反码再加1
比如:6的二进制是00000000
00000000 00000000
00000110
反码就是
11111111 11111111 11111111
11111001
补码就是
11111111 11111111 11111111 11111010 表示-6
示例如下:
-6>>>1 :6的二进制是 00000000 00000000
00000000 00000110
反码就是 11111111 11111111
11111111 11111001
补码就是 11111111 11111111
11111111 11111010 表示-6 向右移1位且最高位补0 ,就是011111111 11111111 11111111
1111101,十进制就是2147483645
原文:http://www.cnblogs.com/bbthome/p/3549605.html