首页 > temp > 简明python教程 >
-
[史上最全]C#(VB.NET)中位运算符工作过程剖析(译)(2)
C#和VB.NET中的右移运算符的使用,参见下面代码:
[C#]
[VB.NET]
使用右移运算符计算x/(2的幂)
x>>n的值等于x/(2的n次方),比如8>>2的值为8/(2的2次方),也就是8/4。
[C#]
[VB.NET]
当然,这种方式的计算速度也要高于8/Math.Pow(2,2);
[C#]
[VB.NET]
循环按位移动
循环按位左移
循环按位左移会将数值的二进制格式中的每位均向左移动1个位置,然后将移出来的数值(1或0)替补到右边空白处。
上图显示了将154循环按位向左移动1位,它的值等于154<<1|154>>7。循环按位左移得到的结果可以归纳为:a<<n|a>>(b-n)。b为数值的位数,如果数值为Byte类型,那么最后的结果为a<<n|a>>(8-n),如果数值为Int32类型,那么b为32,最后的结果为a<<n|a>>(32-n)。
C#和VB.NET中循环按位左移的使用,可以参见下面:
[C#]
[VB.NET]
循环按位右移
循环按位右移会将数值的二进制格式的每位均向右移动1个位置,然后将移出来的数值(1或0)替补到左边空白处。
如上图所示,将155循环按位右移1个位置,最后它的值等于155>>1|155<<7。循环按位右移得到的结果可以归纳为:a>>n|a<<(b-n)。其中b为数值位数。如果数值为Byte类型,那么结果为a>>n|a<<(8-n),如果数值为Int32类型,那么得到的结果为a>>n|a<<(32-n)。
C#和VB.NET中循环按位右移的使用,可以参见下面代码:
[C#]
[VB.NET]
译者注:在使用位操作符时,一定要先确定被操作的数值是什么类型,占多少位,同一个数值,数据类型不同,最后得到的结果不一样。原文中,对于任何一个数值(比如52),都在强调它是Byte类型还是Int16类型。
作者:周见智
出处:http://www.cnblogs.com/xiaozhi_5638/