我试图找到<<>>运算符如何处理整数的确切信息,但我找不到明确的答案(the documentation在这方面不是很好).

语义有两部分我不清楚.首先,哪些位被"移入"?

  • 零从一侧移入(即0b1110_1010u8 << 4 == 0b1010_0000u8),或
  • 钻头旋转(即0b1110_1010u8 << 4 == 0b1010_1110u8),或
  • 它是未指定的(比如未指定整数的溢出行为),或者
  • 还有别的.

此外,移位如何处理有符号整数?符号位是否也与移位有关?还是没有具体说明?

推荐答案

Rust的移位运算符的确切语义是什么?

没有.移位运算符是用户可以实现的特性,基本上你可以在它们中做任何你想做的事情.该文档甚至展示了一个"Shr的[a]n实现,它将向量向右旋转给定的量."


<<>>运算符如何处理整数,

在第Arithmetic and Logical Binary Operators节上有一个参考.最有用的是,它包含以下脚注:

有符号整数类型的算术右移,无符号整数类型的逻辑右移.

Logical shiftingarithmetic shifting是已有定义的计算机科学术语.

零被移入

钻头旋转

没有.旋转leftright有不同的方法.

Rust相关问答推荐

as操作符如何将enum转换为int?

PyReadonlyArray2到Vec T<>

在特征中使用Async时,如何解决不透明类型`impl Future<;out=self>;`不满足其关联的类型边界和警告?

当两者都有效时,为什么Rust编译器建议添加';&;而不是';*';?

修改切片/引用数组

我可以在不收集或克隆的情况下,将一个带有Item=(key,val)的迭代器拆分成单独的key iter和val iter吗?

`*mut[T]`与`*mut T`的区别

习语选项<;T>;到选项<;U>;当T->;U用From定义

从 rust 函数返回 &HashMap

Rust 为什么被视为borrow ?

全面的 Rust Ch.16.2 - 使用捕获和 const 表达式的 struct 模式匹配

如何在 Rust 中将 Vec> 转换为 Vec>?

在 Rust 中,为什么整数溢出有时会导致编译错误或运行时错误?

LinkedList::drain_filter::drop 中 DropGuard 的作用是什么?

如何在 Rust 中编写修改 struct 的函数

使用 `.` 将 T 转换为 &mut T?

Cargo:如何将整个目录或文件包含在功能标志中?

Rust 中的通用 From 实现

Rust 跨同一文件夹中文件的可见性

如何从 many0 传播 Nom 失败上下文?