0

所以我在DartPad上运行 dart我尝试运行以下代码:

import 'dart:math';

void main() {
  print(~0);
  print(~-1);
  print(~~-1);
}

这导致了以下输出

4294967295
0
4294967295

正如您所看到的,从 0 反转位会产生最大数(我期待 -1,因为 dart 使用二进制补码)并从 -1 反转会导致 0,这会导致反转 2 次 -1 不会给我 - 1.

看起来它在反转 0 时忽略了第一位,这是为什么呢?

4

1 回答 1

3

为 Web 编译的 Dart(包括 DartPad)使用 JavaScript 数字和数字运算。其后果之一是按位运算(~&|^<<和on )仅给出 32 位结果,因为这就是相应的 JavaScript 操作所做的>>>>>int

由于历史原因,Dart 选择给出无符号的 32 位结果,而不是二进制补码数。~-10也是~0unsigned 0xFFFFFFFF,而不是 -1。

简而言之,就是这样。

于 2022-01-28T10:54:02.480 回答