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

uint64_t变量赋值-1的取值疑问:0xffffffff还是0xffffffffffffffff?

为什么uint64_t x = -1在64位机器上是0xffffffffffffffff?

这得从C语言的赋值类型转换规则说起,不是你想的直接把int字面量的二进制位截断:

  • 首先,-1作为整数字面量确实是int类型,但当把有符号整数赋值给无符号整数时,C标准要求按无符号类型的取值范围做模运算:最终结果是该无符号类型能容纳的最小非负值,等于原值加上「无符号类型最大值+1」的整数倍。
  • 64位机器上的uint64_t最大值是0xffffffffffffffff(也就是2^64 - 1),-1加上2^64之后正好等于这个最大值,所以x的结果就是它。
  • 你提到的0xffffffff是32位无符号类型uint32_t的最大值——如果x是uint32_t类型,赋值-1才会得到这个结果,但uint64_t是64位,转换是按64位的规则来的。
  • 至于LL/ULL后缀,是用来指定字面量本身的类型,但这里的核心不是字面量类型,而是赋值时的转换逻辑:哪怕字面量是32位int,赋值给64位无符号类型时,会先把-1转换成64位无符号的对应值,而不是只取低32位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:05:54