Метод toSigned (абстрактный)
int toSigned(Возвращает наименее значимые width биты этого целого числа, расширяя наиболее значимый сохранённый бит до знака. Это эквивалентно усечению значения до размещения в 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);
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-core/int/toSigned.html