为何Rust中2的4次方输出为10?求官方文档依据及正确实现
关于Rust中位运算与幂运算输出“异常”的解释与解决方法
问题原因:输出格式导致的误解
你遇到的不是计算错误,而是输出格式设置的问题——代码里用了{:X}格式说明符,它会把计算得到的十进制数值转换成大写十六进制输出:
- 十进制16的十六进制表示就是
10 - 十进制32的十六进制表示就是
20
比如:
1 << 4的计算结果是十进制16,用{:X}输出就变成了十六进制的10base.pow(4)计算2⁴得到十进制16,十六进制输出就是10
所有计算逻辑完全符合数学定义,只是输出进制和你预期的不一致。
正确实现十进制输出的方法
如果想要得到十进制的16、32这类预期结果,只需要把格式说明符换成默认的{},或者显式指定十进制的{:d}:
- 位运算示例:
println!("{}", 1 << 4); // 输出十进制16
- 幂运算示例:
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
相关产品推荐
相关产品推荐

