我试图分别检查int的最小和最重要的字节。
我想检查最低有效字节中的任何位是否为1。如果为true,我想返回1,如果为false则返回0。 我的尝试:
int lsb_one(int x) {
return ( (x & 0xffff) != 0 );
}
我想检查最高有效字节中的任何位是否为零。如果为true,我想返回1,如果为false则返回0。 我的尝试:
int msb_zero(int x) {
return ( (~(x & 0x0000ffff)) != 0 );
}
任何指针?
答案 0 :(得分:2)
尝试:
int lsb_one(int x) {
return ((x & 0xff) != 0 );
}
int msb_zero(int x) {
return ((x & 0xff000000) != 0xff000000);
}
请注意,第二个版本与平台有关,假设int是32位值。
答案 1 :(得分:0)
正如其他答案已经指出的那样,你的掩码应该是0xff
而不是0xffff
,因为一个字节通常是8位。要保持msb_zero
函数实现独立,请使用CHAR_BIT
和sizeof()
,如下所示:
#include <limits.h>
int msb_zero(int x) {
return (x & (0xff << (sizeof(int) * CHAR_BIT - CHAR_BIT))) != 0;
}
CHAR_BIT
中的limits.h
为您提供的位数是字符/字节。
修改为完整起见,lsb_one
功能:
int lsb_one(int x) {
return ((x & 0xff) != 0 );
}