8

Dartでビット単位の符号なし右シフト/ゼロフィル右シフトを実行するにはどうすればよいですか?

たとえば、次のようなものです。

foo >>> 2
4

3 に答える 3

10

ゼロ埋め右シフトには、特定の整数サイズが必要です。Dart の整数は任意の精度であるため、'>>>' 演算子は意味がありません。

ゼロ フィル右シフトをエミュレートする最も簡単な方法は、最初にビット数を指定することです。

例:

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

2021 年更新:

Dart 整数は 64 ビットになりました。Dart 2.14 以降、>>>演算子は 64 ビット整数をシフトし、最上位ビットを 0 で埋めます。

于 2012-07-31T20:57:43.957 に答える
2

使用するユーティリティ関数を定義できます。

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

これは、32 ビットの符号なし整数があることを前提としており、それがあれば問題ありません。

于 2012-11-03T15:49:22.070 に答える