C:检查0或1的最低有效和最高有效字节

时间:2013-01-10 03:52:22

标签: c

我试图分别检查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 );
}

任何指针?

2 个答案:

答案 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_BITsizeof(),如下所示:

#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 );
}