设置uchar的位

时间:2014-09-14 15:03:54

标签: c++ binary

我正在尝试按如下方式设置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

我做错了什么?

由于

3 个答案:

答案 0 :(得分:1)

最后的转变太多了。它将84乘以2得到168

答案 1 :(得分:1)

在系列结束时,您经常会为零移动一次:

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

这不会生成二进制文件100,而是1000,因此您的结束值将是

1010 1000 (168)

而不是

1010 100 (84)

删除其中一个最后0班,你会很高兴: Example

答案 2 :(得分:1)

当你想&#34;追加&#34;一个1,你应该先转移,然后或1 。否则,您将刚刚附加的1移至2,因此您的结果恰好是预期数字的两倍。

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

//0
num <<= 1;

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