C++中的3×8=18

C++中的3×8=18,c++,math,C++,Math,我的程序中出现了一个小的数学错误,这导致了程序其余部分的问题,我不明白为什么会发生这种情况。在类的这一部分中,我没有为我希望的内置类型重载运算符。如果有,请告诉我在哪里 此函数用于计算存储数字所需的最少位数,该位数作为一个值存储在deque值中,因此0x123456将存储为{0x12、0x34、0x56},integer.bits的输出应为21 // all types here are standard, so i dont know whats going on unsign

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

此函数用于计算存储数字所需的最少位数,该位数作为一个值存储在deque值中,因此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;
    }

3*8是24,十六进制是0x18。您的代码中分散了std::hex…

有人将您的流更改为hex,并将24位十进制打印为18位十六进制。

可能更糟-可能是基数3;今天的Boost库:。你在做一个整数类:@larsmans:听起来像是一个真正有用的小库!感谢链接。。。
8 1 8
16 2 16
...

and finally, 
18 3 18