Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpPmNuOv 53 of 390 menu
◀ ▶

Минус в беззнаковом целом в C++

Если случайно записать отрицательное число в беззнаковый тип, ошибки не будет. Тип unsigned не хранит минус, и в ячейке окажется другое, уже положительное число.

Возьмем unsigned int и запишем в него -1:

unsigned int num = -1; std::cout << num << "\n"; // выведет 4294967295

Так выходит из-за круга битов. У ячейки нет отдельных отрицательных значений. Шаг назад от нуля попадает на последнее число диапазона.

Удобно увидеть это на одном байте, 8 бит. Беззнаковый байт хранит числа от 0 до 255. Ноль в битах - это 00000000. Шаг назад включает все восемь битов: 11111111. Это и есть 255.

Тип unsigned int устроен так же, только ячейка длиннее: 4 байта, 32 бита. Ноль - это тридцать два нуля. Минус один включает все биты. Беззнаковое чтение этих битов дает 4294967295, верхнюю границу диапазона.

Минус два - это еще один шаг назад. Последний бит снова ноль, остальные единицы. На экране 4294967294:

unsigned int num = -2; std::cout << num << "\n"; // выведет 4294967294

Дан следующий код:

unsigned int num = -3; std::cout << num << "\n";

Скажите, соберется ли программа и какое число попадет на экран.

Дан следующий код:

unsigned int num = -5; std::cout << num << "\n";

Скажите, какое число попадет на экран.

Беззнаковый байт хранит числа до 255. Какое число получится, если в такой байт записать -1?

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить