如何使用位域(结构)重写此代码
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))__
之类的东西,这是特定于编译器的。
我需要使用结构访问带符号的短类型数字的高位、低位和数字位。 不太了解,正在上网,但是关于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))__
之类的东西,这是特定于编译器的。