3 * 8 = 18 в с ++ - PullRequest
       0

3 * 8 = 18 в с ++

0 голосов
/ 27 июня 2011

Я получаю небольшую математическую ошибку в моей программе, которая вызывает проблемы в остальной части, и я не понимаю, почему это происходит. в этой части класса я не перегружал операторы для встроенных типов (я надеюсь). если я сделал, пожалуйста, покажи мне, где

эта функция предназначена для вычисления наименьшего числа битов, необходимого для сохранения числа, которое хранится в deque <uint8_t> value как одно значение, поэтому 0x123456 будет храниться как {0x12, 0x34, 0x56} и выводить to 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;
    }

пока что эта часть cout ing

8 1 8
16 2 16
...

and finally, 
18 3 18

http://ideone.com/zLfz2

Ответы [ 2 ]

11 голосов
/ 27 июня 2011

3*8 равно 24, а в гексах это 0x18.Вы std::hex разбросаны по вашему коду ...

2 голосов
/ 27 июня 2011

Кто-то изменил ваш поток на шестнадцатеричный, и он печатает 24 десятичных числа как 18 шестнадцатеричных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...