的使用我得到了一些遺傳代碼,並不能找出一條是:需要幫助瞭解位運算符
byte[] b = new byte[4] { 3, 2, 5, 7 };
int c = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3];
誰能告訴這裏發生了什麼?謝謝!
的使用我得到了一些遺傳代碼,並不能找出一條是:需要幫助瞭解位運算符
byte[] b = new byte[4] { 3, 2, 5, 7 };
int c = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3];
誰能告訴這裏發生了什麼?謝謝!
基本上它使用big-endian conversion將4字節數組的低31位轉換爲整數。
所以一個{0,0,0,1}的字節數組將被轉換爲1;的{0,0,1,0}將被轉換成256字節數組等
它通過按位運算符的混合物:
沒有做到位數學在一分鐘內so..for樂趣:
[額外的括號顯示OPS的順序]
((b[0] & 0x7f) << 24) | (b[1] << 16) | (b[2] << 8) | b[3]
(b[0] & 0x7f) << 24 = 11 0000 0000 0000 0000 0000 0000
b[1] << 16 = . . . . . . . . . . 10 0000 0000 0000 0000
b[2] << 8 = . . . . . . . . . . . . . . . 101 0000 0000
b[3] = . . . . . . . . . . . . . . . 0111
現在
OR這些結合在一起,你會得到
0011 0000 0010 0000 0101 0000 0111 = 50,464,007
你想給我們介紹一下您在哪裏找到代碼一點背景知識?或者這只是一個測試? – Nix
@Nix是他真正相關的地方嗎? – MGZero
@MGZero現在它已被回答否.. – Nix