Я пытаюсь манипулировать 64 битами. Я использую номер для хранения в длинном длинном без знака. Для проверки porcess я запустил следующую программу
#include <iostream>
using namespace std;
int main()
{
unsigned long long x = 1;
int cnt = 0;
for(int i =0 ;i<64;++i)
{
if((1<<i)&x)
++cnt;
}
cout<<cnt;
}
но вывод cnt равен 2, что явно неверно. Как мне манипулировать 64 битами? где коррекция? На самом деле я пытаюсь найти четность, то есть число 1 в двоичном представлении числа менее 2 ^ 63.
Для 64-битной, вы должны использовать 64-битную 1. Итак, попробуйте это:
if(((unsigned long long) 1<<i)&x)
(1<<i)
переполнится, когда i
больше 32
Вы можете написать условие как (x >> i) & 1
Что подразумевается под манипуляцией в вашем случае? Я думаю, что вы собираетесь проверить каждый бит переменной x. Ваш x должен содержать максимальное значение, потому что вы собираетесь тестировать каждый бит вашей переменной x
int main()
{
unsigned long long x = 0xFFFFFFFFFFFFFFFF;
int cnt = 0;
for(int i =0 ;i<64;++i)
{
if((1<<i)&x)
++cnt;
}
cout<<cnt;
}