在长长中保持2^63 -1
holding 2^63 -1 in long long
我在Windows XP (code:Block, MinGW)和Ubuntu (11.04, g++)上运行了以下两段代码
我运行以下代码有问题
#include <iostream>
using namespace std;
int main(){
long long a = 9223372036854775807;
cout << a;
return 0;
}
这个数字是2^63 -1。但是我将得到一个错误声明:
C:Documents and SettingsJohnWongMy文档codeblock343_hw_1main.cpp|9|错误:整数常数太大大号for "long" type|
在ubuntu上-它编译了,但返回的答案是9223372036854775808,注意末尾的8 ....
现在,如果我使用幂函数运行这段代码,就可以了。
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int main(){
long long a = pow(2,64);
cout << "a: " << setprecision(20) << a << endl;
cout << "a-1: " << setprecision(20) << a-1 << endl;
cout << "a-2: " << setprecision(20) << a-2 << endl;
cout << "a+0: " << setprecision(20) << a+0 << endl;
cout << "a+1: " << setprecision(20) << a+1 << endl;
cout << "a+2: " << setprecision(20) << a+2 << endl;
cout << "a+3: " << setprecision(20) << a+3 << endl;
return 0;
}
我将得到我想要的值(从+1开始的任何值都会导致溢出,没关系)。
在Ubuntu上输出看起来是一样的。好。
这是怎么回事?为什么常数不好??我甚至尝试了intmax_t和int64_t作为数据类型运行第一个代码。
有人能解释一下这种行为吗?谢谢!long long a = 9223372036854775807LL;
LL使字面量成为长字面量。否则,文本默认为长文本,然后在存储到。
c++语言在c++ 11之前没有long long
类型。您的编译器显然不是c++ 11编译器,并且它支持long long
作为扩展。这就是编译器发出警告的原因。它警告你文字是用一种非标准的(扩展的)方式解释的,也就是说,当为文字搜索合适的类型时,编译器必须超出语言标准的范围。
相关文章:
- 没有找到相关文章