2

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

举个例子,这段代码:

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

就我而言,进行右移会丢弃所有小于您移动的位数的位。因此,右移b08 位将删除 的 8 位b2,只留下b1

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

我想知道,在转移之前是否需要掩蔽b0255 << 8获得 的值b1

注意:
在检索值之前,我唯一能想到的屏蔽是是否有其他内容存储在更高的字节中,例如尝试取回 的值b2,其中将使用以下代码:

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

1 回答 1

2

我想知道,在转移以获得 b1 的值之前,是否需要用 255 << 8 屏蔽 b0?

不,没有必要。所以编译器会省略屏蔽。有些人认为它使代码更容易理解或保护他们免受一些想象中的失败场景。它是完全无害的。

于 2012-08-08T01:16:53.243 回答