Метод toSigned
- int width
Возвращает наименее значимые width биты этого целого числа, расширяя самый высокий сохраненный бит до знака. Это эквивалентно усечению значения до width битов с использованием представления со знаком 2-дополнительных кодов. Возвращаемое значение имеет одинаковое битовое значение во всех позициях выше 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);
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-core/BigInt/toSigned.html