为什么可以';t我的C++;算法处理超过62位的整数? 我玩C++,决定写算法,返回给定整数的位长。在解决了一些不相关的问题后,它终于奏效了。这是我的代码: #include <iostream> using namespace std; long long int ipow(int x,int n) { if (n==0) return 1; if (n%2!=0) return x*ipow(x,((n-1)/2))*ipow(x,((n-1)/2)); return ipow(x,n/2)*ipow(x,n/2); } int bits(long long int n) { if (n==0 || n==1) return 1; int i=1; while (n>ipow(2,i+1)-1) i++; return i+1; } int main() { long long int n; cin>>n; cout<<bits(n)<<endl; } #包括 使用名称空间std; 长整型ipow(整型x,整型n) { 如果(n==0)返回1; 如果(n%2!=0)返回x*ipow(x,((n-1)/2))*ipow(x,((n-1)/2)); 返回ipow(x,n/2)*ipow(x,n/2); } 整数位(长整数n) { 如果(n==0 | | n==1)返回1; int i=1; 而(n>ipow(2,i+1)-1)i++; 返回i+1; } int main() { 长整型n; cin>>n; cout

为什么可以';t我的C++;算法处理超过62位的整数? 我玩C++,决定写算法,返回给定整数的位长。在解决了一些不相关的问题后,它终于奏效了。这是我的代码: #include <iostream> using namespace std; long long int ipow(int x,int n) { if (n==0) return 1; if (n%2!=0) return x*ipow(x,((n-1)/2))*ipow(x,((n-1)/2)); return ipow(x,n/2)*ipow(x,n/2); } int bits(long long int n) { if (n==0 || n==1) return 1; int i=1; while (n>ipow(2,i+1)-1) i++; return i+1; } int main() { long long int n; cin>>n; cout<<bits(n)<<endl; } #包括 使用名称空间std; 长整型ipow(整型x,整型n) { 如果(n==0)返回1; 如果(n%2!=0)返回x*ipow(x,((n-1)/2))*ipow(x,((n-1)/2)); 返回ipow(x,n/2)*ipow(x,n/2); } 整数位(长整数n) { 如果(n==0 | | n==1)返回1; int i=1; 而(n>ipow(2,i+1)-1)i++; 返回i+1; } int main() { 长整型n; cin>>n; cout,c++,algorithm,integer,long-integer,C++,Algorithm,Integer,Long Integer,因为1位是符号位,所以剩下63个“有用”位。而且你的算法试图找到一个大于你的输入数的2次幂,所以你的最大输入数只能是62位,这样你的2次幂就可以高出1到63位。long是有符号的,所以至少可以解释其中一个“缺失”位-符号位。他可以使其无符号以提供额外的精度位吗?我没有仔细查看代码以查看是否有其他内容会中断,但是的,他通常可以通过无符号获得额外的位。使用无符号整数有效。我现在得到的正确结果高达2^65-1。之后,每个数字都返回“64”,但很简单“如果”可以处理它。

因为1位是符号位,所以剩下63个“有用”位。而且你的算法试图找到一个大于你的输入数的2次幂,所以你的最大输入数只能是62位,这样你的2次幂就可以高出1到63位。

long
是有符号的,所以至少可以解释其中一个“缺失”位-符号位。他可以使其无符号以提供额外的精度位吗?我没有仔细查看代码以查看是否有其他内容会中断,但是的,他通常可以通过无符号获得额外的位。使用无符号整数有效。我现在得到的正确结果高达2^65-1。之后,每个数字都返回“64”,但很简单“如果”可以处理它。