相关疑难解决方法(0)

很长一段时间用C/C++

我在GNU的C++编译器上尝试这个代码,我无法理解它的行为:

#include <stdio.h>;

int main()
{
    int  num1 = 1000000000;
    long num2 = 1000000000;
    long long num3;
    //num3 = 100000000000;
    long long num4 = ~0;

    printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
    printf("%d %ld %lld %llu", num1, num2, num3, num4);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我取消注释注释行时,代码不会编译并给出错误:

错误:对于long类型,整数常量太大

但是,如果代码按原样编译并执行,则会产生远大于10000000000的值.

为什么?

c++ types long-integer

82
推荐指数
3
解决办法
24万
查看次数

为什么 long long 2147483647 + 1 = -2147483648?

为什么此代码不打印相同的数字?:

long long a, b;
a = 2147483647 + 1;
b = 2147483648;
printf("%lld\n", a);
printf("%lld\n", b);
Run Code Online (Sandbox Code Playgroud)

我知道 int 变量的最大数量是 2147483647,因为 int 变量是 4 字节。但据我所知,long long 变量是 8 字节,但为什么这段代码会这样呢?

c c++ integer-overflow undefined-behavior twos-complement

75
推荐指数
3
解决办法
7690
查看次数

整数类型可以在C++中存储多大的值范围

可以unsigned long int在32位计算机上保存十位数字(1,000,000,000 - 9,999,999,999)吗?

此外,有什么的范围unsigned long int,long int,unsigned int,short int,short unsigned int,和int

c++ int

73
推荐指数
6
解决办法
26万
查看次数

C++ 17中的整数溢出是否"自动"安全?

如果我写这样的代码:

auto n = 2048 * 2048 * 5;
char* buf = new char[n];
Run Code Online (Sandbox Code Playgroud)

那么,auto从C++ 17中的整数溢出中推导类型是否安全?

c++ integer-overflow auto c++17

1
推荐指数
1
解决办法
207
查看次数