toSigned 抽象方法

BigInt toSigned(
  1. int width
)

返回此整数的最低有效 width 位,将最高保留位扩展到符号位。这与使用有符号 2 的补码表示法截断值以适应 width 位相同。返回值在所有高于 width 的位置上具有相同的位值。

var big15 = BigInt.from(15);
var big16 = BigInt.from(16);
var big239 = BigInt.from(239);
                               //     V--sign bit-V
big16.toSigned(5) == -big16;   //  00010000 -> 11110000
big239.toSigned(5) == big15;   //  11101111 -> 00001111
                               //     ^           ^

此操作可用于模拟底层语言的算术。例如,为了递增一个 8 位有符号量

q = (q + 1).toSigned(8);

q 将从 0 计数到 127,回绕到 -128 并计数回 127

如果输入值可以适应 width 位而无需截断,则结果与输入相同。避免截断 x 所需的最小宽度是 x.bitLength + 1,即

x == x.toSigned(x.bitLength + 1);

实现

BigInt toSigned(int width);