LINUX.ORG.RU

Побитовое сложение.


0

1

Вот скажите, правильно ли я помню, что знаковость/беззнаковость целого не влияет на работу операторов сложения? Ну т.е, если первый бит - знак, то

(u) 0100 +
(u) 0100 =
(u) 1000

(s) 0100 +
(s) 0100 =
(s) 1000

(s) 1001 +
(s) 1010 =
(s) 0011

С ходу не смог нагуглить.

★★★

Последнее исправление: AlexCones (всего исправлений: 1)

Зависит от метода кодирования знака. Но везде дополняющий код, потому можно сказать что не влияет

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Зависит от метода кодирования знака.

Если как обычно - первый бит знак, 0 - «+», 1 - "-", при отрицательных в обратном порядке.

AlexCones ★★★
() автор топика
Ответ на: комментарий от vertexua

Читай что такое «дополняющий код»

Во-первых «дополнительный», в вторых про него и писал:

при отрицательных в обратном порядке.

AlexCones ★★★
() автор топика
Ответ на: комментарий от ms-dos32

Это переполнение, я правильно понял?

Результат сложения двух отрицательных чисел не влез в три значащих бита.

PolarFox ★★★★★
()
Ответ на: комментарий от AlexCones

Так это ошибками в вычислениях чревато, к примеру, делая калькулятор с использованием 16-битных регистров для хранения результатов, числа от 65536 и больше будут использоваться и выводиться неверно

ms-dos32
()

Оно влияет на диагностику переполнения. Нужно смотреть не только, был ли перенос за разрядную сетку, но был ли перенос в страший знаковый разряд:

http://www.dpla.ru/celye/2.10072005.htm

mky ★★★★★
()

Никак не влияет ни на сложение ни на вычитание.

Legioner ★★★★★
()

На эту тему можно почитать книжку по ассемблеру x86. В частности, про хранение чисел в допкоде и то, как выставляются флаги OF и CF при сложении/вычитании.

vzzo ★★★
()

В Си переполнение знакового числа — Undefined Behavior. (И clang этим пользуется при оптимизации, поэтому не нужно рассказывать что для сложения генерируется команда add на этом вашем x86.)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.