1

我正在尝试分别检查 int 的最低和最高有效字节。

我想检查最低有效字节中的任何位是否为 1。如果为真,我想返回 1,如果为假,我想返回 0。我的尝试:

int lsb_one(int x) {
  return ( (x & 0xffff) != 0 );
}

我想检查最高有效字节中的任何位是否为零。如果为真,我想返回 1,如果为假,我想返回 0。我的尝试:

int msb_zero(int x) {
  return ( (~(x & 0x0000ffff)) != 0 );
}

任何指针?

4

2 回答 2

3

尝试:

int lsb_one(int x) {
    return ((x & 0xff) != 0 );
}

int msb_zero(int x) {
    return ((x & 0xff000000) != 0xff000000);
}

请注意,第二个版本取决于平台,假设 int 是 32 位值。

于 2013-01-10T03:55:21.723 回答
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_BITin为您提供的limits.h位数是一个字符/字节。

编辑为了完整起见,lsb_one函数:

int lsb_one(int x) {
    return ((x & 0xff) != 0 );
}
于 2013-01-10T04:26:29.437 回答