Visual studio 2015 C++;按位左移32

Visual studio 2015 C++;按位左移32,visual-studio-2015,bitwise-operators,Visual Studio 2015,Bitwise Operators,目前我正在研究背包问题的蛮力算法。对于小问题实例,例如15个项目,一切都非常有效。但是,当我为较大的实例(如31或32)运行程序时,算法失败了。我遇到了一个位移位的问题,我用它来计算可能的解的数量。例如,对于10项,程序应进行2^10次迭代,因此我使用以下语句: unsigned long long int setCnt = (1 << 10); unsigned long long int setCnt=(1问题在于1是一个signed int常量文本——因此移位作为signed

目前我正在研究背包问题的蛮力算法。对于小问题实例,例如15个项目,一切都非常有效。但是,当我为较大的实例(如31或32)运行程序时,算法失败了。我遇到了一个位移位的问题,我用它来计算可能的解的数量。例如,对于10项,程序应进行2^10次迭代,因此我使用以下语句:

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

unsigned long long int setCnt=(1问题在于
1
是一个
signed int
常量文本——因此移位作为
signed int
移位(显然只有32位,包括编译器上的符号),因此溢出,导致未定义的行为


尝试使用
1 all如何知道结果值?最大无符号长通常为2**64-1(18446744073709551615)1844 67404015152067 968是2×64×2 **31,像一个符咒一样!我没有意识到1在这个例子中被当作是符号int。非常感谢。在C和C++中所有的情况下都不带整数的整数字被当作一个带符号的int。