如何只保留最低的8位

时间:2013-01-15 17:43:19

标签: c

  

可能重复:
  How do i get the lower 8 bits of int?

我将创建校验和计算器。我不明白我怎么做“现在取c0的结果为0x247,并且只保留最低8位,在本例中为0x47”。你能救我吗?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:1)

如果您只需要int值的最后8位,请&0xFF一起使用。

int a = 0x247;
int b = 0;
b = a & 0xFF;

答案 3 :(得分:1)

使用按位运算符。例如: 0101010011010001&amp; 0000000011111111 等于11010001。