Вы путаете числа с цифрами.
A (32-разрядный) int
(безусловно, самый распространенный в наши дни) может содержать 2 ^ 32 (около 4 миллиардов) возможных значений.Но каждое из этих значений является числом .0b10000
, 0x10
, 020
и 16
- это разные цифры, но как int
они все имеют одинаковое число .На этом уровне преобразование не производится.
То, что вы делаете, пытается использовать числа в качестве чисел.И это вызовет у вас головную боль.Умножая на 10 для сдвига, вы эффективно используете десятичные цифры в качестве битов.Десятичная цифра стоит немногим более 3 бит (log 2 10 ~ = 3.322), что означает, что ваше 32-битное число может без проблем представлять только 10 бит.Любое значение свыше 1023 в конечном итоге станет 11-значным числом и переполнит ваш int
.
Использование long int
вместо может дать вам еще 32 бита, если в вашей среде 64-бит long
с.Это увеличит ваш лимит до 19 "бит" (20, если вы используете unsigned long
).Но лучшее решение - вместо этого использовать строку, если целью является просто увидеть двоичное представление.