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