为什么这个代码不打印相同的数字

long long a, b;
a = 2147483647 + 1;
b = 2147483648;
printf("%lld\n", a);
printf("%lld\n", b);

我知道int变量的最大值是2147483647,因为int变量是4字节.

推荐答案

2147483647 + 1被判断为两个ints的总和,因此溢出.

2147483648太大,无法放入int中,因此编译器将其假定为long(或MSVC中的long long).因此它不会溢出.

要以long long为单位进行求和,请使用适当的常量后缀,即.

a = 2147483647LL + 1;

C++相关问答推荐

与unions 的未定义行为

将 typewriter LF打印到Windows终端,而不是隐含的CR+LF

使用NameSurname扫描到两个单独的字符串

Can函数指针指向C++中具有不同参数连续性的函数

我可以在C中声明不同长度数组的数组而不带变量名吗?

将常量转换为指针会增加.数据大小增加1000字节

自定义变参数函数的C预处置宏和警告 suppress ?

我的程序在收到SIGUSR1信号以从PAUSE()继续程序时总是崩溃()

将 struct 传递给函数

For循环中的变量行为不符合预期.[C17]

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

使用ld将目标文件链接到C标准库

C语言中的数字指针

循环中的静态变量与块中的变量和循环

静态初始化顺序失败是否适用于C语言?

为什么我的旧式&q;函数在传递浮点数时会打印2?

被调用方函数内部的C-Struct变量,它是指针还是无关紧要

共享内存未授予父进程权限

C 中从 Unix 纪元时间转换的损坏

在 C 语言中,为什么 10/3 应该给出 3.333 却给出 3.000? (保存 10 和 3 的变量被声明为double)