c++中对无符号字符的位运算



我在windows操作系统中使用C++。

我有两个值。值1和值2。

我想把值1写在无符号字符的前2位,把值2写在最后6位。

类似地,我想使用位操作从无符号字符中提取value1和value2。

请帮助我如何达到我的要求。

请尝试使用像这样的位运算符,

char x = (value1<<6)|(value2&0x3f); 

并提取值,

value1 = (x>>6) & 0x3;
value2 = (x & 0x3f)
union my_char {
unsigned char value;
struct {
unsigned char field1 :2;
unsigned char field2 :6;
};
};
my_char c;
c.value = 255;
unsigned char c1 = c.field1;
unsigned char c2 = c.field2;

编辑:

Jarod42是对的。根据c++标准,结果是未定义的行为。尽管所有的(?(编译器都可以,但你的意图是什么(但这不是一个解决方案(。

这就是为什么c++20标准现在有一个bit_cast(https://en.cppreference.com/w/cpp/numeric/bit_cast)。

如果您不使用c++20,那么它很容易自己实现。

最新更新