为什么`int a = -1; printf('%lld',a)`输出4294967295?

问题描述 投票:-3回答:2

cplusplus official doc,我看到%lld格式期望long long int格式,并且当类型不一致时,它将被提升。并且将-1提升为long long int时,它应该为-1。因此,为什么int a=-1;printf("%lld",a)输出4294967295?

c++
2个回答
1
投票

当类型不一致时,将被提升

这是不正确的。参数必须具有类型long long int,否则行为是不确定的。同样,“ cplusplus.com”不是“官方文档”,它是一个私人运营的网站。

0xffffffff的类型是实现定义的。在常见的LLP64实现中,它将具有类型long long并给出定义良好的行为,这就是您所看到的。在其他实现上,它可能是long甚至是其他类型,因此您可以看到任何内容。


0
投票

考虑编写表达式long test = 0x1000000000。显然,程序员希望将大于int的值分配给变量test。这就是将int类型太大的值提升为更大类型的原因。 (请参阅https://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal)。在这种情况下,您的文字0xffffffff太大而无法容纳带符号的整数值,因此将其提升为long。此long传递给printf,printf将打印它传递的值。

© www.soinside.com 2019 - 2024. All rights reserved.