设置uchar的位
setting bits of a uchar
我正试图按如下方式设置uchar
:
uchar num = 0;
//0
num <<= 1;
//1
num |=1;
num <<=1;
//0
num <<=1;
//1
num |=1;
num <<=1;
//0
num <<=1;
//1
num |=1;
num <<=1;
//0
num <<= 1;
//0
num <<=1;
//should be 01010100 = 84
std::cout << " num is " << num << " int " << (unsigned int) num << std::endl;
它应该以二进制8位序列01010100结束,该序列在十进制中为84。然而,当我打印时,我得到的输出是num is ® int 168
我做错了什么?
感谢
最后一个班次太多了。它将84乘以2,得到168
在您的系列结束时,您经常切换为零:
//1
num |=1;
num <<=1;
//0
num <<= 1;
//0
num <<=1;
这不会生成二进制100
,而是生成1000
,因此您的最终值将是
1010 1000 (168)
而不是
1010 100 (84)
删除最后0个移位中的一个,就可以继续了:示例
当您想要"追加"1
时,您应该首先移位,然后对1
进行OR运算。否则,您将刚刚附加的1
移位,它将变为2
,因此您的结果正好是预期数字的两倍。
//1
num <<= 1;
num |= 1;
//0
num <<= 1;
然后,您的最后一次移位是正确的(与其他答案相反,这些答案也是正确的,但如果您只是删除最后一次移动,则代码注释是错误的)。
相关文章:
- 在java中读取c++字节的位字段
- 如何进行特定的位操作?
- CreateDIBSection为同一图像返回不一致的位图位值
- 使用 int 指针的浮点数的位表示形式
- 不带连续 1 的位字符串,使用自上而下的 DP
- 在有符号基础类型枚举的位域上溢出
- 从 C++ 中的位表示形式初始化字符
- 无法初始化以 std::byte 作为成员类型的位字段
- 用C++压缩内存中的位图
- XQueryPointer 的 mask_return 值中的位表示哪些键?
- 哪些是互斥的:位字段还是格式化标志?在c++中
- C++gdi::内存中的位图到PNG图像
- 无符号和有符号短整型的位宽
- 如何将内存中的位转换为一串和零?
- 将 1 添加到 32 位的位集
- LoadImage 函数不适用于 ImageMagick 创建的位图图像
- 循环访问 C++ 个字符数组的位
- 在没有查找表的情况下计算大数的位长度
- C 如何从UCHAR数组中填充结构的位字段
- 设置uchar的位