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

为何Rust中2的4次方输出为10?求官方文档依据及正确实现

关于Rust中位运算与幂运算输出“异常”的解释与解决方法

问题原因:输出格式导致的误解

你遇到的不是计算错误,而是输出格式设置的问题——代码里用了{:X}格式说明符,它会把计算得到的十进制数值转换成大写十六进制输出:

  • 十进制16的十六进制表示就是10
  • 十进制32的十六进制表示就是20

比如:

  • 1 << 4的计算结果是十进制16,用{:X}输出就变成了十六进制的10
  • base.pow(4)计算2⁴得到十进制16,十六进制输出就是10
    所有计算逻辑完全符合数学定义,只是输出进制和你预期的不一致。

正确实现十进制输出的方法

如果想要得到十进制的16、32这类预期结果,只需要把格式说明符换成默认的{},或者显式指定十进制的{:d}:

  1. 位运算示例:
println!("{}", 1 << 4); // 输出十进制16
  1. 幂运算示例:
let base: i32 = 2;
for i in 1..=5 {
    print!("{} ", base.pow(i)); // 输出 2 4 8 16 32
}

Rust官方文档相关说明

Rust标准库的std::fmt模块中明确规定:

  • X/x格式说明符用于将整数转换为大写/小写十六进制字符串输出
  • 默认格式({})或d说明符用于十进制输出
    位运算符<<的行为是标准左移(无溢出时,左移n位等价于乘以2ⁿ),pow方法则严格计算底数的整数次幂,两者的计算逻辑均符合数学定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:40:27