我想知道在进行位移时是否需要在检索存储在某个字节处的值之前屏蔽一个数字。
举个例子,这段代码:
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 位将删除 的 8 位b2
,只留下b1
。
Console.WriteLine(b0 >> 8); //this also gets b1!!
我想知道,在转移之前是否需要掩蔽b0
以255 << 8
获得 的值b1
?
注意:
在检索值之前,我唯一能想到的屏蔽是是否有其他内容存储在更高的字节中,例如尝试取回 的值b2
,其中将使用以下代码:
Console.WriteLine(b0 & 255); //gets the value of b2