Rust 如何以独立于平台的方式使用前导零/尾随零?

Rust 如何以独立于平台的方式使用前导零/尾随零?,rust,Rust,我想在u32的二进制表示中找到第一个非零位前导零/尾随零看起来像我想要的: let x: u32 = 0b01000; println!("{}", x.trailing_zeros()); 这将按预期和中的说明打印3。在big-endian机器上会发生什么,是3还是其他数字 文件上说 返回二进制表示形式中的尾随零数 它与机器二进制表示法(因此,尾随零的结果取决于体系结构)或基数2数字系统(因此结果总是3)有关吗?类型u32以32位作为抽象概念表示二进制数。你可以把它们想象成抽象的数学数字,范

我想在
u32
的二进制表示中找到第一个非零位<代码>前导零/
尾随零
看起来像我想要的:

let x: u32 = 0b01000;
println!("{}", x.trailing_zeros());
这将按预期和中的说明打印3。在big-endian机器上会发生什么,是3还是其他数字

文件上说

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


它与机器二进制表示法(因此,尾随零的结果取决于体系结构)或基数2数字系统(因此结果总是3)有关吗?

类型
u32
以32位作为抽象概念表示二进制数。你可以把它们想象成抽象的数学数字,范围从0到232-1。这些数字的二进制表示形式是按照通常的约定编写的,即从最高有效位(MSB)开始,以最低有效位(LSB)结束,并且
training_zeros()
方法返回该表示形式中的尾随零数

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


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

这种方法与平台AFAIK无关:它们只接受数字的二进制表示。您想知道数字的硬件表示形式吗?这通常是毫无意义的。
0b01000
是在大爆炸之前的小端、大端、双端、空间、其他时间线中的
0b01000
。是的,结果总是3