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

标签 rust

我想在 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/

相关文章:

rust - 有没有办法做unwrap_or_return一个错误(任何错误)

rust - Arc、thread 和 channel 的借用值不够长

rust - 如何为具有生命周期成员的结构派生 serde::Deserialize

vector - 在传递给不安全代码之前正确初始化向量

rust - 如何只为给定的平台使用一个箱子?

rust - 为什么 `std` 模块未声明?

unicode - 在格式化程序中打印Unicode

rust - 在 Rust 的 HashMap<(String, usize), f64> 中查找键

opengl - 将没有 repr(C) 的结构传递给 C API 是否安全?

rust - 通过界面而不是真正粗暴和排版重量级的惯用方式是什么?