Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何只保留最低的8位_C - Fatal编程技术网

C 如何只保留最低的8位

C 如何只保留最低的8位,c,C,可能重复: 我将创建校验和计算器。我不明白我现在如何处理0x247的结果,并只保留最低的8位,在本例中是c中的0x47。您能帮助我吗?如果您只需要int值的最后8位,请使用0xFF执行(&W) 使用位运算符。例如: 0101010011010001 & 0000000011111111 等于11010001。简单,使用位掩码 您可以使用按位AND运算符来实现这一点 下面是一些代码: #include <stdio.h> int main(){ int number = 0

可能重复:


我将创建校验和计算器。我不明白我现在如何处理0x247的结果,并只保留最低的8位,在本例中是c中的0x47。您能帮助我吗?

如果您只需要int值的最后8位,请使用0xFF执行(&W)


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

简单,使用位掩码

您可以使用按位AND运算符来实现这一点

下面是一些代码:

#include <stdio.h>

int main(){
    int number = 0x247, firsteight;

    firsteight = number & 0xFF;

    printf("%x, %x", number, firsteight);

    return 0;
}

这是一个明显的重复,但这个注释,但这是十六进制值。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

显然,这是家庭作业。使用谷歌提示:屏蔽。@JamesAdam:不,使用Bing。@OliCharlesworth,但这是十六进制值。0x247@user1981157:没有十六进制值,只有十六进制表示。苹果的数量不是十六进制或十进制。@Oli:heehee hexordecimal
(val & 255) == (val2 & 255)
    0010 0100 0111
  & 0000 1111 1111
  ----------------
    0000 0100 0111  <-- only the last 8 bits are kept