Spec-Zone.ru › Dart 2

dart:core

Абстрактный метод toSigned

BigInt toSigned(
  1. int width
)

Возвращает младшие width биты этого целого числа, расширяя старший сохраняемый бит до знакового. Это эквивалентно усечению значения до 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);

© 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/BigInt/toSigned.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API