4バイト整数から1バイトのデータをすべて抽出するコードを書こうとしています
2バイト数の4バイト数のAND演算を行うとどうなるのですか
byte 0 of 0xAABBCCDD is 0xDD
byte 1 of 0xAABBCCDD is 0xCC
byte 2 of 0xAABBCCDD is 0xBB
byte 3 of 0xAABBCCDD is 0xAA
結果I:以下、これを達成することができますが、私はそれが出力を作成するように動作し、なぜ知っているだけで好奇心れるコードは、コード
#include <stdio.h>
int getByte(int x, int n);
void main()
{
int x = 0xAABBCCDD;
int n;
for (n=0; n<=3; n++) {
printf("byte %d of 0x%X is 0x%X\n",n,x,getByte(x,n));
}
}
// extract byte n from word x
// bytes numbered from 0 (LSByte) to 3 (MSByte)
int getByte(int x, int n)
{
return (x >> (n << 3)) & 0xFF;
}
が出力されていますコンパイラが0xFFを0x000000FFに変換しなかった理由は、4バイトの数でAND演算を実行し、代わりに4バイトのデータではなく1バイトのデータのみからなる出力を生成するためです。
具体的な回答は、[C11標準 - 6.3.1.8通常の算術変換(ドラフトn1570)](http://port70.net/~nsz/c/c11/n1570.html#6.3.1.8) –
と、両方とも '0xFF 'と' 0x000000FF'はCで同じ型と同じ値を持っています。出力形式が異なっています –
user1597336、好奇心、フォーマットが '' 0x%X ''の代わりに' '%d" 'だった場合、 'getByte(x、n)'からの4バイトの 'int'戻り値に対して' '255 ''または '' 0000000255''を使用しますか? – chux