>> 算数右移
a>>b ==>a/2(b%32) :a除以2的b模32次方
*12>>1 ==> 12/2(1) =6
*12>>33 ==> 12/2(1) =6
*-12>>2 ==> -12/2(2) = -3
*-12>>66 ==> -12/2(66%32) = -12/2(2) = -3
*128>>2 ==> 128/2(2%32) = 128/2(2) = 32
exp1
int a1 = 12>>1; //变量a1取值为6
12 的二进制表达式
0000 1100
右移动一位
0000 0110
十进制:6
exp2
int a2 = 12 >>2; //-3
舍弃二进制数的最后两位.在二进制数的开头增加两位符号位.-12是负数故增加两个符号位.
+12===>-12
0000 1100
| 1取反
1111 0011
| +1
1111 0100 <---12的二进制形式
1111 0100
负数-〉正数
1 -1
1111 1101
1111 1100
2 取反
0000 0011 ==>3
exp3
int a3 = 128 >>2 ;//32
0000 0000
1000 0000
右移动两位=>
0010 0000 ==>32
<< 左移位运算
舍弃二进制开头一位,在二进制数尾部增加一位0
公式: a*2(b) <== a<<b :数字a左移b位结果为a*2的b次方
原文:http://www.cnblogs.com/cici-new/p/3590903.html