-4

重複の可能性:
int の下位 8 ビットを取得するにはどうすればよいですか?

チェックサム計算機を作成します。cで「0x247の結果を取得し、この例では0x47である最下位8ビットのみを保持する」を行う方法がわかりません。手伝って頂けますか ?

4

4 に答える 4

3

簡単です。ビットマスクを使用してください。

これは、ビットごとの 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
于 2013-01-15T17:54:47.533 に答える
2

これは明らかな重複ですが、このコメントは私を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
于 2013-01-15T18:02:28.390 に答える
1

ビット演算子を使用します。例: 0101010011010001 & 0000000011111111 は 11010001 に相当します。

于 2013-01-15T17:53:02.090 に答える
1

int 値から最後の 8 ビットのみが必要な場合は&0xFF.

int a = 0x247;
int b = 0;
b = a & 0xFF;
于 2013-01-15T17:47:21.367 に答える