目前我正在研究背包问题的蛮力算法。对于小问题实例,一切正常工作,例如15个项目。但是当我为31或32等更大的实例运行我的程序时,算法失败。我遇到了一个按位转换的问题,我正在使用它来计算可能的解决方案的数量。例如有10个项目计划应该2^10次迭代,所以我用这个语句:C++按位左移32
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模式下编译我的解决方案。 是什么导致了这种行为?我怎样才能绕过这个?
您如何知道结果值? –
max unsigned long long一般是2 \ * \ * 64-1(18446744073709551615)。 18446744071562067968是2 \ * \ * 64 - 2 \ * \ * 31 –