toSigned 抽象方法

int toSigned(
  1. int width
)

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

                         //     V--sign bit-V
16.toSigned(5) == -16;   //  00010000 -> 11110000
239.toSigned(5) == 15;   //  11101111 -> 00001111
                         //     ^           ^

此操作可以用来模拟底层语言的算术运算。例如,为了增加一个 8 位有符号数

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

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

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

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

实现

int toSigned(int width);