You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确用C++字面量表示最小32位有符号整数?

32位最小整数字面量的C++标准疑问

如果使用<limits>头文件,可轻松写出32位最小整数:

std::int32_t small = std::numeric_limits<std::int32_t>::min();

这会使small等于-2147483648。

我在一个要求直接写出数值的库中工作,因此更倾向于写成:

std::int32_t small = -2147483648;

但在Visual Studio中这么写会出现问题,查阅C标准后发现,理论上任何编译器都不应允许这种写法。原因是C标准规定整数字面量不包含负号,负号实际是后续的一元负号操作。因此C++会先处理整数字面量2147483648,该数值超出32位int的范围,会被当作long int(64位)。

(顺带一提,这就是我在Visual Studio中出错的原因,它将2147483648视为unsigned long而非signed long,但本文关注标准行为)

在我看来,无法直接写出表示32位数值-2147483648的32位字面量,必须先写成64位字面量2147483648UL再取反。这似乎是个疏漏,但除Visual Studio外其他编译器都能编译,我哪里理解错了?


内容的提问来源于stack exchange,提问作者Cort Ammon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:33:22