C ++ побитовое смещение влево на 32

В настоящее время я работаю над алгоритмом грубой силы для задачи о ранце. Все отлично работает для небольших проблемных экземпляров, например, 15 пунктов. Но когда я запускаю свою программу для больших экземпляров, таких как 31 или 32, алгоритм терпит неудачу. Я столкнулся с проблемой побитового сдвига, которую я использую для вычисления количества возможных решений. Например, с 10 элементами программа должна сделать 2 ^ 10 итераций, поэтому я использую этот оператор:

unsigned long long int setCnt = (1 << 10);

Вычисленное значение 1024 является правильным. Но для(1 << 31) вычисленное значение равно 18446744071562067968 (макс.unsigned long long int), но должно быть 2147483648.(1 << 32) возвращает 0. Это похоже на то, что все отлично работает для перехода от 0 до 30 бит.

Я использую сообщество Visual Studio 2015 и компилирую свое решение в режиме x64. Что вызывает это поведение? Как я могу обойти это?

Ответы на вопрос(1)

Ваш ответ на вопрос