【发布时间】:2020-05-06 01:00:28
【问题描述】:
我正在使用 MSVC 2019。
所以,我刚刚搜索了here。
他们说long long 是 8 个字节,值的范围是 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
所以,我认为这是可行的:
long long a = 2147483648 + 2147483648;
printf("%lld", a);
我以为它会打印4294967296,等于2147483648 + 2147483648。
但它向我打印0.....
所以,这次我尝试了一点不同:
long long a = 2147483648;
printf("%lld", a + a);
它打印4294967296!!!
所以这里有两个问题。
FIRST:这些代码有什么区别?
第二个:为什么第一个代码给了我错误的数字(0)?
提前致谢:)
【问题讨论】:
-
你的字面量仍然是
int大小。 -
@Amadeus,也可以,这是他/她的问题。
-
@DanielA.White 我知道我应该使用类似
2147483628LL的东西。但是,为什么第二个代码尽管只使用了2147483628仍然有效? -
您不应该对您的问题进行双重标记,因为 C 编译器与 C++ 编译器不同,它们可能使用不同的规则。而是根据您实际使用的编译器进行标记
-
@HoseongJeon 因为
a的类型是long long,此时它不是文字。