2012-08-08 28 views
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 

就我個人而言,做右移下降是小於你已經轉移的位數的所有位。因此,將b0右移8位將丟棄b2的8位,只剩下b1

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

我想了解,是否有任何需要轉移到獲得b1前值掩蓋b0255 << 8

NB:
唯一需要我可以檢索值之前掩蔽想到的是,如果有其他存儲在較高字節,如試圖找回的b2價值的東西在這個代碼將用於:

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

如果你想讓'b1'和'b2''字節'以及'b0'''ushort'''''',那麼這將是非常明顯的。右移「ushort」不會傳播符號位。 – 2012-08-08 01:15:27

回答

2

我想了解,是否有任何需要轉移到得到的B1前值掩蓋的B0 255 < < 8?

不,沒有必要。所以編譯器會忽略屏蔽。有些人認爲它使代碼更容易理解或保護它們免受某些想象中的故障情況的影響。這完全無害。

相關問題