我有一個字節,其在二進制值是11111111我必須根據這些規則我的字節擴展到16位0101010101010101:如果位= 1,現在是01.如果位= 0,現在是10我如何屏蔽位?
例如:
00001111 -> 1010101001010101
00000101 -> 1010101010011001
這樣做的操作是什麼?
我有一個字節,其在二進制值是11111111我必須根據這些規則我的字節擴展到16位0101010101010101:如果位= 1,現在是01.如果位= 0,現在是10我如何屏蔽位?
例如:
00001111 -> 1010101001010101
00000101 -> 1010101010011001
這樣做的操作是什麼?
我不認爲有一個運營商的「擴大」位如上所述。 但是你可以在移和測試位如下一起做一個循環:
unsigned char b = 0xff;
unsigned int result = 0x0;
for (int i=0; i<8; i++) {
result <<= 2; // make place for the next 2 bits
int isSet = b & 0x80; // check highest significant bit of b
if (isSet) {
result |= 0x01; // in bits: 01
}
else {
result |= 0x02; // in bits: 10
}
b <<= 1;
}
希望它能幫助。
就是這樣!謝謝 –
不客氣。如果它解決了你的問題,請不要忘記接受答案...... –
首先,你的字節轉換爲int:
int x = (int)byte_value;
然後,延伸到16位,通過在時移的位4,則如圖2所示,然後如圖1所示,然後用移和按位倍增每個比特OR:
x = ((x << 4) | x) & 0b0000111100001111;
x = ((x << 2) | x) & 0b0011001100110011;
x = ((x << 1) | x) & 0b0101010101010101;
x = (x << 1) | x;
然後,掩蔽的位,以使偶數位位置是1,如果該位爲1,而奇數位置爲1,如果該位爲0(使用逐比特NOT):
x = (x & 0b0101010101010101) | (~x & 0b1010101010101010);
要小心:如果byte_value被簽名爲char,那麼轉換爲int將執行符號擴展並可能填充除了低8位以外的所有符號。 –
你爲什麼用16位掩碼屏蔽一個字節?你打算把你的字節實體轉換成16位字嗎? –
你意識到一個字節(通常是現在的日子)只有8位。你如何計劃增加你的字節? –