我想在 u32
的二进制表示中找到第一个非零位。 leading_zeros
/trailing_zeros
看起来像我想要的:
let x: u32 = 0b01000;
println!("{}", x.trailing_zeros());
这会按 the docs 中的预期和描述打印 3 .在大端机器上会发生什么,是 3 还是其他数字?
文档说
Returns the number of trailing zeros in the binary representation
它是否与机器二进制表示(所以 trailing_zeros
的结果取决于架构)或 base-2 数字系统(所以结果总是 3)有关?
最佳答案
u32
类型将 32 位的二进制数表示为抽象概念。您可以将它们想象为 0 到 232-1 范围内的抽象数学数字。这些数字的二进制表示以从最高有效位 (MSB) 开始并以最低有效位 (LSB) 结束的通常约定编写,并且 trailing_zeros()
方法返回该表示中的尾随零。
字节序仅在将此类整数序列化为字节时起作用,例如用于将其写入字节缓冲区、文件或网络。你没有在你的代码中做任何这些,所以在这里没关系。
如上所述,以 MSB 开头的数字也只是一种约定,但这种约定如今对于以位置表示法书写的数字来说非常普遍。对于编程,此约定仅在格式化数字以供显示、从字符串解析数字以及可能用于命名方法(如 trailing_zeros()
)时才相关。在寄存器中存储 u32
时,位没有任何定义的顺序。
关于rust - 如何以独立于平台的方式使用leading_zeros/trailing_zeros?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59245978/