2013-09-23 2 views
-2

Я пытаюсь использовать побитовые операторы по типу uint64_t. Когда я запускаю это, я получаю вывод из 37 (47 - 10) бит, хотя он должен быть длиной 54 бит (64-10 бит). Как я могу это исправить?Побитовая проблема в C

uint64_t temp = addr; //(addr input - 11111111110100011010111011011111000101111001000) 
temp = temp >> 10; 
return temp; //returns 37 bits only as input is 47 bits. 

Выход: температура теперь 1111111111010001101011101101111100010

+0

Показать еще код. Что такое 'addr'? – unwind

+0

addr также uint64_t со значением в двоичном формате, указанном в комментариях. – codepk

+2

Есть 64 бит в uint64_t. Вы не видите ведущих нулей. – harold

ответ

1

temp составляет 64 бита, потому что, как вы объявили его.

Когда вы печатаете его, начальные нули не отображаются, если вы не укажете, что вы хотите, чтобы они отображались в вашем заявлении на печать.

Попробуйте с addr = 1000000000100000000010000000001000000000100000000010000000001000 (или любым другим 64-разрядным номером, начиная с 1), и вы увидите.

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