繁体   English   中英

设置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 否则,你移动刚刚附加的1变为2 ,因此你的结果正好是你预期的数字的两倍。

//1
num <<= 1;
num |= 1;

//0
num <<= 1;

然后,你的最后一次转换是正确的 (与其他答案相反,这也是正确的,但如果你只是删除最后一个班次你的代码注释是错误的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM