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

Abseil库中128位整数如何构成?MakeUint128参数是何含义?

absl::uint128 构成规则与absl::MakeUint128参数含义

absl::MakeUint128的两个入参分别对应128位无符号整数拆分出的两个64位分段,函数签名的语义等价于:

absl::uint128 MakeUint128(uint64_t high, uint64_t low);

两个参数的具体含义:

  • 第一个参数high:128位整数的高64位,每一位的权重是2^64
  • 第二个参数low:128位整数的低64位,每一位的权重是2^0

完整128位数值的计算公式非常直白:

最终值 = (static_castabsl::uint128(high) << 64) | low

你提到的代码absl::uint128 big = absl::MakeUint128(1, 0);代入公式计算就是:
(1 << 64) | 0 = 2^64,和你观察到的结果完全一致。

底层实现逻辑

Abseil的absl::uint128没有强制依赖编译器原生128位支持,本质是两个连续存储的64位无符号整数的包装结构体:

  • 内存布局和原生整数的小端存储规则对齐:低地址存低64位low,高地址存高64位high
  • 所有算术运算、位运算、比较运算都是手动基于两个64位分段实现,比如加法进位、减法借位的判断,都是先操作低64位,再把进位/借位值传递到高64位计算。

常见取值参考

  • absl::MakeUint128(0, 0):数值0
  • absl::MakeUint128(0, UINT64_MAX):数值2^64 - 1,也就是64位无符号整数能表示的最大值
  • absl::MakeUint128(1, UINT64_MAX):数值2^64 + (2^64 -1) = 2^65 -1
  • absl::MakeUint128(UINT64_MAX, UINT64_MAX):128位无符号整数最大值2^128 - 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:06:21