gpt4 book ai didi

c++ - 持有 2^63 -1 in long long

转载 作者:可可西里 更新时间:2023-11-01 17:29:28 27 4
gpt4 key购买 nike

我在 Windows XP(代码: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 Settings\JohnWong\My Documents\codeblock\343_hw_1\main.cpp|9|error: integer constant is too large for "long" type|

在 ubuntu 上 - 它编译了,但返回的答案是 9223372036854775808,注意最后的 8....

现在,如果我运行这段代码,使用 power 函数,我没问题。

#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 使文字成为 long long 文字。否则,文字默认为长文字,然后在存储到 a 之前转换为 long long。

关于c++ - 持有 2^63 -1 in long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com