在长长中保持2^63 -1

holding 2^63 -1 in long long

本文关键字:      更新时间:2023-10-16

我在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作为扩展。这就是编译器发出警告的原因。它警告你文字是用一种非标准的(扩展的)方式解释的,也就是说,当为文字搜索合适的类型时,编译器必须超出语言标准的范围。

相关文章:
  • 没有找到相关文章