如何在Dart中进行零填充右移?

Tow*_*wer 3 bit-manipulation dart

如何在Google Dart中进行零填充右移?

像:foo >>> 2例如:

Flo*_*sch 5

零填充右移需要特定的整数大小.由于Dart中的整数具有任意精度,因此">>>"运算符在那里没有意义.

模拟零填充右移的最简单方法是首先使用位和数字.

例:

(foo & 0xFFFF) >> 2 // 16 bit zero-fill shift
(foo & 0xFFFFFFFF) >> 2 // 32 bit shift.
Run Code Online (Sandbox Code Playgroud)


cre*_*not 5

从 Dart 2.14 开始,添加了三移运算符,即整数的按位无符号右移。

>>>Dart 中的三班制操作员

从 Dart 版本 2.14 开始,您可以简单地使用它:

var foo = 42;
foo >>> 2;
Run Code Online (Sandbox Code Playgroud)

为了默认为您的应用程序启用此功能,您必须在以下位置升级您的 SDK 约束pubspec.yaml

environment:
  sdk: '>=2.14.0-0 <3.0.0'
Run Code Online (Sandbox Code Playgroud)

在文档中了解有关运算符的更多信息

预 Dart 2.14

如果你还没有升级到Dart 2.14,你可以简单地使用这个函数:

/// Bitwise unsigned right shift of [x] by [s] bits.
///
/// This function works as `>>>` does starting with Dart 2.14.
int urs(int x, int s) => s <= 0 ? x : (x >> s) & (0x7fffffffffffffff >> (s - 1));
Run Code Online (Sandbox Code Playgroud)

这是可行的,因为现在 Dart 中整数始终是 64 位。