Из следующего кода я ожидаю установить все биты от x до 1, но каким-то образом устанавливаются только первые 32 бита:
int64_t x = 0xFFFFFFFF;
x<<32;
x|=0xFFFFFFFF;
Примечание: печать x после каждой строки приводит к 4294967295 (32 младших бита установлены в 1).
Также попробовал использовать numeric_limits<int64_t>::min()
без успеха.
Мой вопрос, как установить все биты в х?
Использование RHEL5.5.
Спасибо
x<<32
вычисляет результат сдвига x
осталось 32 бита и ничего не делает со значением. Вы хотите использовать x <<= 32
вместо.
Почему бы и нет int64_t x = -1
? или же uint64_t x = ~0
?
Это будет работать:
int64_t x = ~0LL; (iner
или же
int64_t x = -1LL;
Вы можете сойти с рук, не имея LL
, но не гарантировано — зависит от компилятора.