Как создавать 64-битные маски?
Вопрос
На основе следующей простой программы побитовый оператор сдвига влево работает только для 32 бит.Это правда?
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(void)
{
long long currentTrafficTypeValueDec;
int input;
cout << "Enter input:" << endl;
cin >> input;
currentTrafficTypeValueDec = 1 << (input - 1);
cout << currentTrafficTypeValueDec << endl;
cout << (1 << (input - 1)) << endl;
return 0;
}
Вывод программы:
Enter input:
30
536870912
536870912
Enter input:
62
536870912
536870912
Как я могу создавать 64-битные маски?
Решение
Сделайте ввод также длинным и используйте 1LL << (ввод - 1LL).Здесь ваш сдвиг вычисляется по 32 битам и преобразуется в 64 бита при сохранении в currentTrafficTypeValueDec.
Не связан с StackOverflow