请问这道题目为什么使用int可以通过,改成long long反而不行
这是题目链接:https://www.nowcoder.com/practice/5928127cc6604129923346e955e75984?tpId=40&tqId=21376&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan&difficulty=&judgeStatus=3&tags=/question-ranking
#include<string>
#include<vector>
#include<iostream>
#include<cstdio>
#include<utility>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
string s;
while(getline(cin,s)){
int sum=0;
for(int i=0;i<s.size();i++){
sum+=(s[i]-'0')*((2<<(s.size()-1-i))-1);
//最低位为第0位,第k位数为x,则该位计算为x*(2^(k+1)-1)
//最终的结果是要把读入的数的全部位进行上述计算后相加
}
cout<<sum<<endl;
}
return 0;
}
这是我写的代码,溢出的输入是1000000000000000000000000000000,正确输出是:2147483647,但把sum改成long long后输出为:-2147483649
为什么ong long型反而溢出呢,这是为什么?麻烦了解的lao解答一下,谢谢!