C# 位移运算

原文链接:http://www.cnblogs.com/linlin/archive/2013/02/01/2888916.html

左移<< 运算符

x 向左位移若干个位,放弃 x 中经移位后会超出结果类型范围的那些高序位,将其余的位向左位移,将空出来的低序位均设置为零。

右移>> 运算符

x 向右位移若干个位

xintlong 类型时,放弃 x 的低序位,将剩余的位向右位移,如果 x 非负,则将高序空位位置设置为零,如果 x 为负,则将其设置为 1。

xuintulong 类型时,放弃 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

上一篇:C# 位移运算


下一篇:PAT乙级1011(C++)——龙哥哥的刷题路