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

时间:2012-07-31 18:18:23

标签: bit-manipulation dart

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

例如:foo >>> 2

3 个答案:

答案 0 :(得分:5)

零填充右移需要特定的整数大小。由于Dart中的整数具有任意精度,因此'>>>'操作员在那里没有意义。

模拟零填充右移的最简单方法是先按位和数字。

示例:

(foo & 0xFFFF) >> 2 // 16 bit zero-fill shift
(foo & 0xFFFFFFFF) >> 2 // 32 bit shift.

答案 1 :(得分:1)

您可以定义要使用的实用程序函数:

int zeroFillRightShift(int n, int amount) {
  return (n & 0xffffffff) >> amount;
}

假设你有32位无符号整数,如果你有,那就没关系。

答案 2 :(得分:1)

从 Dart 2.14 开始,现在添加了 triple-shit operator,即整数的按位无符号右移。

Dart 中的三移 >>> 运算符

你可以简单地使用这个starting with Dart version 2.14

var foo = 42;
foo >>> 2;

为了默认为您的应用启用此功能,您必须在 pubspec.yaml 中升级您的 SDK 约束:

environment:
  sdk: '>=2.14.0-0 <3.0.0'

Learn more about the operator in the docs

飞镖 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));

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