Вопрос

На основе следующей простой программы побитовый оператор сдвига влево работает только для 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top