可能重复:
如何获得 int 的低 8 位?
我将创建校验和计算器。我不明白如何在 c 中执行“现在获取 0x247 的结果并仅保留最低 8 位,在本示例中为 0x47”。你能帮助我吗 ?
可能重复:
如何获得 int 的低 8 位?
我将创建校验和计算器。我不明白如何在 c 中执行“现在获取 0x247 的结果并仅保留最低 8 位,在本示例中为 0x47”。你能帮助我吗 ?
简单,使用位掩码!
您可以使用按位 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
这是一个明显的重复,但这个评论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
使用位运算符。例如:0101010011010001 & 0000000011111111 等于 11010001。
如果您只想要 int 值的最后 8 位,请&
使用0xFF
.
int a = 0x247;
int b = 0;
b = a & 0xFF;