Установка всех битов в int64_t

Из следующего кода я ожидаю установить все биты от x до 1, но каким-то образом устанавливаются только первые 32 бита:

int64_t x = 0xFFFFFFFF;
x<<32;
x|=0xFFFFFFFF;

Примечание: печать x после каждой строки приводит к 4294967295 (32 младших бита установлены в 1).
Также попробовал использовать numeric_limits<int64_t>::min() без успеха.
Мой вопрос, как установить все биты в х?
Использование RHEL5.5.

Спасибо

4

Решение

x<<32 вычисляет результат сдвига x осталось 32 бита и ничего не делает со значением. Вы хотите использовать x <<= 32 вместо.

13

Другие решения

Почему бы и нет int64_t x = -1? или же uint64_t x = ~0?

10

Это будет работать:

int64_t x = ~0LL;   (iner

или же

int64_t x = -1LL;

Вы можете сойти с рук, не имея LL, но не гарантировано — зависит от компилятора.

4
По вопросам рекламы [email protected]