Как можно преобразовать целые числа со знаком в целые числа без знака - PullRequest
0 голосов
/ 21 октября 2019

Я читаю ускоренный c ++, и я только что натолкнулся на строку:

Vector.size() -100 yield unsigned results, which means that they, too, cannot be less than zero- even if vector.size() < 100.

Что здесь происходит? Любая помощь приветствуется. Спасибо

1 Ответ

0 голосов
/ 21 октября 2019
Vector.size() -100

Что здесь происходит?

Один из операндов арифметического выражения подписан, а другой операнд не подписан. Более того, ранг типа без знака, вероятно, выше, чем ранг подписанного операнда.

В этом случае подписанный операнд преобразуется в тип без знака более высокого ранга. Поскольку 100 представимо в типе без знака, это не влияет на значение.

Вычитание выполняется для операндов без знака. Если математический результат операции без знака был бы вне представимого диапазона (то есть отрицательно), то фактический результат был бы представимым значением, которое согласуется с математическим результатом по модулю M, где M - число представимых значений в беззнаковомtype.

Поскольку в представляемом диапазоне целых чисел без знака присутствуют только положительные значения, фактический результат, соответствующий математическому результату, также должен быть положительным.

...