如何使用位域(结构)重写此代码

How to rewrite this code using bit field(struct)

我需要使用结构访问带符号的短类型数字的高位、低位和数字位。 不太了解,正在上网,但是关于signed short的信息不多。

我尝试运行它使用一些函数,但我的任务是使用位域...

    void print(signed short num)

    {
for (int i = 0; i < 16; i++)
    {
    if (num&(1 << i))
    cout << i << " bit is 1" << endl;
    else
    cout << i << " bit is 0" << endl;

}
cout << "Your number is:" << num << endl;

    }

    int main() {
signed short num;
cout << "Please, enter your number:";
cin >> num;
print(num);
if (num&(1 << 15))
    cout << "Your number is negative" << endl;
else
    cout << "Your number is positive" << endl;

return 0;
    }

您可以结合使用匿名 union 和位域来实现所需的行为:

union bit_access {
    int16_t as_short;
    struct {
        uint8_t bit15 : 1;
        // Continue until :
        uint8_t bit0 : 1;
    };
};

 // You can then access individual bits using :
 bit_access b = { -1234 };
 std::cout << "bit 0 = " << (int) b.bit0 << std::endl;

请注意,如果我没记错的话:

  • 大小unsigned short不保证一定是16
  • 位域 struct 不能保证在没有填充的情况下表示,您可能需要使用 __attribute__((packed))__ 之类的东西,这是特定于编译器的。