バイナリの値が11111111であるバイトがあります。これらのルールに従って、バイトを011010101010101に16ビット拡張する必要があります。ビット= 1の場合は01、ビット= 0の場合は10です。どのようにビットをマスクできますか?
例:
00001111 -> 1010101001010101
00000101 -> 1010101010011001
これはどのような操作ですか?
バイナリの値が11111111であるバイトがあります。これらのルールに従って、バイトを011010101010101に16ビット拡張する必要があります。ビット= 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;
}
はそれがお役に立てば幸いです。
それだけです! Thankss –
あなたは大歓迎です。あなたの問題を解決した場合、答えを受け入れることを忘れないでください。 –
まず、intにあなたのバイトを変換する:
int x = (int)byte_value;
そして、次に、シフトとビット単位で各ビットを倍増、1次に、2次に、一度にビット4をシフトすることにより、16ビットに伸びますOR:次に
x = ((x << 4) | x) & 0b0000111100001111;
x = ((x << 2) | x) & 0b0011001100110011;
x = ((x << 1) | x) & 0b0101010101010101;
x = (x << 1) | x;
、ビットが1であり、ビット0(使用してビット単位NOT)である場合、奇数位置が1であれば偶数ビット位置が1になるようにビットをマスク:
x = (x & 0b0101010101010101) | (~x & 0b1010101010101010);
注意:byte_valueがsigned charなら、intへの変換は符号拡張を行い、1以外のすべてのビットに1を代入することがあります。 –
なぜ16ビットマスクでバイトをマスキングしていますか?バイトエンティティを16ビットワードにキャスティングする予定ですか? –
バイト(通常は今の日)は8ビットしか正しくないことに気付きました。どのようにバイトを増やす予定ですか? –