如何以独立于平台的方式使用leading_zeros/trailing_zeros?

use*_*932 2 rust

我想在 a 的二进制表示中找到第一个非零位 u32leading_zeros/trailing_zeros看起来像我想要的:

let x: u32 = 0b01000;
println!("{}", x.trailing_zeros());
Run Code Online (Sandbox Code Playgroud)

这会按预期和文档中的描述打印3。在大端机器上会发生什么,是3还是其他数字?

文档说

返回二进制表示中尾随零的数量

它与机器二进制表示(因此结果trailing_zeros取决于体系结构)或基数为 2 的数字系统(因此结果始终为3)有关?

Sve*_*ach 8

该类型将u3232 位二进制数表示为一个抽象概念。您可以将它们想象为范围从 0 到 2 32 -1 的抽象数学数字。这些数字的二进制表示以通常的约定编写,即从最高有效位 (MSB) 开始并以最低有效位 (LSB) 结束,并且该trailing_zeros()方法返回该表示中尾随零的数量。

字节序仅在将此类整数序列化为字节时起作用,例如将其写入字节缓冲区、文件或网络。你没有在你的代码中做任何这些,所以这里无关紧要。

如上所述,以 MSB 开头的数字也只是一种约定,但这种约定在今天对于以位置表示法编写的数字来说非常普遍。对于编程,此约定仅在格式化数字以供显示、从字符串解析数字以及可能用于命名方法(如trailing_zeros(). 将u32a存储在寄存器中时,这些位没有任何定义的顺序。