C++ 将两个8位比特集分配给一个16位比特集

C++ 将两个8位比特集分配给一个16位比特集,c++,bitset,C++,Bitset,有没有办法把两个8位的位集分配给一个16位的位集 e、 g bitset first=var1; 位集秒=var2; 比特集=第一+第二; 如果要序列化它们: bitset<16> result(first.to_ulong() * 0x100 + second.to_ulong()); 位集结果(第一个到_ulong()*0x100+第二个到_ulong()); 这将使第一个位变为最高有效位,第二个位变为最低有效位。将第一个位的大小移动 这是假设first.size()+sec

有没有办法把两个8位的位集分配给一个16位的位集 e、 g

bitset first=var1;
位集秒=var2;
比特集=第一+第二;

如果要序列化它们:

bitset<16> result(first.to_ulong() * 0x100 + second.to_ulong());
位集结果(第一个到_ulong()*0x100+第二个到_ulong());

这将使第一个位变为最高有效位,第二个位变为最低有效位。

将第一个位的大小移动

这是假设first.size()+second.size()不大于c++11中的ullong

bitset<first.size()+second.size()> third(first.to_ullong() << first.size() | second.to_ullong());

bitset third(first.to_ullong()如果您不受限制地使用bitset,您可能会发现位运算符最适合此类操作。当然,它更简洁,可能适合也可能不适合,或者您喜欢。例如

unsigned bit_1 = 0xff,   // low order 8 bits set
         bit_2 = 0xff00, // high order 8 bits set
         bit_3 = 0,
         bit_4 = 0x1ce9;

bit_3 = bit_1 | bit_2;  // now bit_3 has all 16 bits set
bit_3 ^= bit_3;         // every bit that was set is now cleared
bit_3 = bit_4 & bit_1;  // using bit_1 as a mask, bit_3 now contains just the
                        // lower order bits that are set in bit_4, 0xe9

0xFF
应该是
0x100
。以下是用户推荐的有效方法:位集第三(第一。to_ulong()哪部分你不明白?我可以解释为什么它有效
unsigned bit_1 = 0xff,   // low order 8 bits set
         bit_2 = 0xff00, // high order 8 bits set
         bit_3 = 0,
         bit_4 = 0x1ce9;

bit_3 = bit_1 | bit_2;  // now bit_3 has all 16 bits set
bit_3 ^= bit_3;         // every bit that was set is now cleared
bit_3 = bit_4 & bit_1;  // using bit_1 as a mask, bit_3 now contains just the
                        // lower order bits that are set in bit_4, 0xe9