-4

可能重复:
如何获得 int 的低 8 位?

我将创建校验和计算器。我不明白如何在 c 中执行“现在获取 0x247 的结果并仅保留最低 8 位,在本示例中为 0x47”。你能帮助我吗 ?

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

不要以为我的意思是你必须对十六进制使用十六进制:

(val & 255) == (val2 & 255)

是一个真实的陈述。这就是为什么,不管数字是如何表示的,通常都可以用二进制来考虑它:

    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 回答