Я немного смущен, потому что хотел инициализировать переменную типа unsigned long
, размер которой составляет 8 байтов в моей системе (на каждой современной системе, я полагаю). Когда я хочу назначить переменную 1 << 63
, я получаю предупреждение о компиляторе, и число на самом деле равно 0. Когда я делаю 1 << 30
, я получаю ожидаемый результат от 2^30 = 1073741824
. Но когда я делаю 1 << 31
, я получаю результат 2^64
(думаю, на самом деле это не должно быть возможным), который печатает 18446744071562067968
.бит смещение с unsigned long type производит неправильные результаты
Может ли кто-нибудь объяснить это поведение мне?
пытались ли вы '1UL << 63' –
Нет, никогда не видел это обозначение (я довольно новыми для C), спасибо :) – borchero
@OliverBorchert Вы можете использовать суффиксы номер с' 'U' для знака 'и' L' для 'long', чтобы изменить тип этого литерала. Есть еще некоторые суффиксы, посмотрите в C-книгу для более подробной информации. – fuz