在做编程题的时候遇到这一问题,代码如下
/**
*Copyright @ 2019 Zhang Peng. All Right Reserved.
*Filename:
*Author: Zhang Peng
*Date:
*Version:
*Description:
**/
#include<iostream>
using namespace std;
int numOf1(int num)
{
int sum = 0;
while (num != 0)
{
if ((num & 1) == 1)
sum++;
num = num >> 1;
}
return sum;
}
int main()
{
int k = -2147483648;
if (k >= 0)
cout << numOf1(k) << endl;
else if (k == INT_MIN)
cout << 32 << endl;
else
{
int temp = abs(k);
cout << numOf1(temp)+1 << endl;
}
system("pause");
return 0;
}
报错出现在
int k = -2147483648;
可能是编译器在执行这一语句时,先将2147483648赋给k,然后再将其取反,这样就出现了问题,因为INT_MAX=2147483647
解决方式如下:
int k = -2147483647-1;
本文探讨了C++编程中整型变量溢出的问题,特别是在处理INT_MIN值时的常见错误。通过具体代码示例,展示了当尝试直接赋值INT_MIN至变量时可能引发的编译错误,并提出了一种有效的解决方案。
2993

被折叠的 条评论
为什么被折叠?



