абстрактный метод toSigned
- int width
Возвращает 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 BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-core/int/toSigned.html