在检索存储在某个字节的值之前,是否需要屏蔽数字?

时间:2012-08-08 01:11:24

标签: c# bit-manipulation bit-shift

我想知道在进行位移时,在检索存储在某个字节的值之前是否需要屏蔽数字。

以此代码为例:

short b1 = 1;
short b2 = 2;
short b0 = (short)((b1 << 8) | b2);         //store two values in one variable

Console.WriteLine(b0);                      //b1 and b2 combined
Console.WriteLine((b0 & (255 << 8)) >> 8);  //gets the value of b1

就我而言,正确的移位会丢弃小于你移位的位数的所有位。因此,将b0右移8位会使b2的8位丢弃,只留下b1

Console.WriteLine(b0 >> 8);  //this also gets b1!!

我想知道,在转移到b0之前是否需要使用255 << 8屏蔽b1

NB:
在检索值之前我唯一需要考虑的是屏蔽是否存在更高字节的其他内容,例如尝试取回b2的值,其中将使用此代码:

Console.WriteLine(b0 & 255);  //gets the value of b2

1 个答案:

答案 0 :(得分:2)

  

我想知道,是否需要屏蔽b0 255&lt;&lt;在转移之前获得b1的值?

不,没有必要。因此编译器将省略掩码。有些人认为它使代码更容易理解或保护它们免受某些想象的故障情况。它完全无害。