我想知道在进行位移时,在检索存储在某个字节的值之前是否需要屏蔽数字。
以此代码为例:
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
答案 0 :(得分:2)
我想知道,是否需要屏蔽b0 255&lt;&lt;在转移之前获得b1的值?
不,没有必要。因此编译器将省略掩码。有些人认为它使代码更容易理解或保护它们免受某些想象的故障情况。它完全无害。