重複の可能性:
int の下位 8 ビットを取得するにはどうすればよいですか?
チェックサム計算機を作成します。cで「0x247の結果を取得し、この例では0x47である最下位8ビットのみを保持する」を行う方法がわかりません。手伝って頂けますか ?
重複の可能性:
int の下位 8 ビットを取得するにはどうすればよいですか?
チェックサム計算機を作成します。cで「0x247の結果を取得し、この例では0x47である最下位8ビットのみを保持する」を行う方法がわかりません。手伝って頂けますか ?
簡単です。ビットマスクを使用してください。
これは、ビットごとの AND 演算子を使用して行うことができます。
ここにいくつかのコードがあります:
#include <stdio.h>
int main(){
int number = 0x247, firsteight;
firsteight = number & 0xFF;
printf("%x, %x", number, firsteight);
return 0;
}
0xFF はバイナリで 11111111 に等しいため、機能します。
これが起こることです:
1001000111 = 0x247
0011111111 = 0xFF
----------- & (bitwise AND)
0001000111
これは明らかな重複ですが、このコメントは私をbut this is hex value. 0x247
悩ませました。システムで同じ数を表す方法はたくさんあります。
int val = 01107; // 583 in octal
int val2 = 0x247; // 583 in hex
int val3 = 583; // 583 in dec
しかし、それらはすべて同じ値です。それらの下位8ビットを取得したい場合は、同じ方法でビットごとの演算子で数値をマスクします。
val3 & 255 = lower 8 bits
val2 & 0xFF = lower 8 bits
val & 0377 = lower 8 bits
hex に対して hex を使用する必要があるとは思わないでください。
(val & 255) == (val2 & 255)
は本当の声明です。そのため、数値の表現方法に関係なく、通常は 2 進数で考えるのが簡単です。
0010 0100 0111
& 0000 1111 1111
----------------
0000 0100 0111 <-- only the last 8 bits are kept
ビット演算子を使用します。例: 0101010011010001 & 0000000011111111 は 11010001 に相当します。
int 値から最後の 8 ビットのみが必要な場合は&
、0xFF
.
int a = 0x247;
int b = 0;
b = a & 0xFF;