2016-10-05 2 views
-1
int main() { 
    uint64_t k = 1 << 32; 
    return 0; 
} 

Я пытаюсь сделать эту операцию (так как я ожидал k быть 64 битными, но я получаю предупреждение о превышении ширины. Могу ли я неправильно вещь uint64_t всегда буду 64 биты?uint64_t имеет ширину всего 32 бита?

+14

попробовать сделать * 1 * 64 бит шириной – jaggedSpire

ответ

4

Что вы с результатом операции не влияет на то, как эта операция выполняется. Правила типа на C++ уже достаточно сложны - если вам нужно было учитывать, что вы сделали с результатом, чтобы выяснить, как будет выполняться операция , они были бы намного более сложными.

Вы сделали 1 << 32. Почему вы ожидаете, что для получения результата 64 бит?

Попробуйте

uint64_t k = 1; 
k <<= 32; 
+0

или 'uint64_t к = 1ull << 32;' – jaggedSpire

+0

справа, есть любое количество способов, которыми Вы можете сделать это. –

Смежные вопросы