C ++ desplazamiento a la izquierda bit a bit por 32

Actualmente estoy trabajando en un algoritmo de fuerza bruta para el problema de la mochila. Todo funciona perfectamente para casos pequeños de problemas, por ejemplo, 15 elementos. Pero cuando ejecuto mi programa para instancias más grandes como 31 o 32, el algoritmo falla. Me he encontrado con un problema con el cambio de bits que estoy usando para calcular la cantidad de posibles soluciones. Por ejemplo, con 10 elementos, el programa debería hacer 2 ^ 10 iteraciones, así que estoy usando esta declaración:

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

El valor calculado 1024 es correcto. Pero para(1 << 31) el valor calculado es 18446744071562067968 (máx.unsigned long long int), pero debe ser 2147483648.(1 << 32) devuelve 0. Es como si todo funcionara bien para cambiar de 0 a 30 bits.

Estoy usando Visual Studio 2015 Community y compilo mi solución en modo x64. ¿Qué causa este comportamiento? ¿Cómo puedo evitar esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta