3*8 = 18 in c ++

cal*_*pto 0 c++ math

我在我的程序中得到一个轻微的数学错误,这导致其余部分出现问题,我不明白为什么会发生这种情况.在这部分类中,我没有为内置类型重载运算符(我希望).如果我这样做,请告诉我在哪里

此函数用于计算存储数字所需的最少位数,该数字存储在deque <uint8_t> value一个值中,因此0x123456将存储为{0x12,0x34,0x56},输出将存储为integer.bits()应该是21

    // all types here are standard, so i dont know whats going on
    unsigned int bits(){
        unsigned int out = value.size() << 3;
        std::cout << out << " " << value.size() << " " << (value.size() << 3) << std::endl;
        uint8_t top = 128;
        while (!(value.front() & top)){
            out--;
            top >>= 1;
        }
        return out;
    }
Run Code Online (Sandbox Code Playgroud)

然而,这部分正在cout发挥作用

8 1 8
16 2 16
...

and finally, 
18 3 18
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/zLfz2

Oli*_*rth 11

3*824,并且以十六进制表示0x18.你std::hex的代码分散了...

  • 推动当天的图书馆:[`ios_state`](http://www.boost.org/doc/libs/release/libs/io/doc/ios_state.html). (6认同)
  • @larsmans:这听起来像一个真正有用的小图书馆!谢谢你链接...... (2认同)