Как манипулировать 64 битами?

Я пытаюсь манипулировать 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.

2

Решение

Для 64-битной, вы должны использовать 64-битную 1. Итак, попробуйте это:

if(((unsigned long long) 1<<i)&x)
4

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

(1<<i) переполнится, когда i больше 32

Вы можете написать условие как (x >> i) & 1

2

Что подразумевается под манипуляцией в вашем случае? Я думаю, что вы собираетесь проверить каждый бит переменной 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;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector