[英]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
。 否则,你移动刚刚附加的1
变为2
,因此你的结果正好是你预期的数字的两倍。
//1
num <<= 1;
num |= 1;
//0
num <<= 1;
然后,你的最后一次转换是正确的 (与其他答案相反,这也是正确的,但如果你只是删除最后一个班次你的代码注释是错误的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.