左移<<
运算符
将 x
向左位移若干个位,放弃 x
中经移位后会超出结果类型范围的那些高序位,将其余的位向左位移,将空出来的低序位均设置为零。
右移>> 运算符
将 x
向右位移若干个位
当 x
为 int
或 long
类型时,放弃 x
的低序位,将剩余的位向右位移,如果 x
非负,则将高序空位位置设置为零,如果 x
为负,则将其设置为 1。
当 x
为 uint
或 ulong
类型时,放弃 x
的低序位,将剩余的位向右位移,并将高序空位位置设置为零。
下面分别举正数左移,右移,负数左移,右移例子。
例子(1):11>>2
11的二进制:0000 1011
>>2 :0000 0010
结果 :2
例子(2):11<<2
11的二进制:0000 1011
<<2 :0010 1100
结果 :44
例子(3):-11>>2,取-11绝对值的二进制
11二进制:0000 1011
按位取反 :1111 0100
+1=补码:1111 0101
>>2 :1111 1101
按位取反:0000 0010
+1=原码:0000 0011
加上原本符号位=-3
例子(4):-11<<2,取-11绝对值的二进制
11二进制:0000 1011
按位取反:1111 0100
+1=补码:1111 0101
<<2 :1101 0100
按位取反:0010 1011
+1=原码:0010 1100
加上原本符号位结果:-44
总结
左移i>>count:也就是i / 2的count次方,再向下取整
例:11>>2=11/4=2
-11>>2=-11/4=-3
右移i<<count:也就是i x 2的count次方
例子:11<<2=11x4=44
-11<<2=-11x4=-44
本文由http://www.52sushen.com整理编辑
转载于:https://www.cnblogs.com/linlin/archive/2013/02/01/2888916.html