2015-12-10 2 views
-3
= 6 - 9 
= 00000110-00001001 
= 00000110+(11110110+1) 
= 00000110+11110111 
= 11111101 

Здесь мы не можем видеть, как переносится так, как флаг переноса включен? Я новичок в программированииПочему в этом вычитании включен флаг переноса

+0

Потому что верхний бит заимствует. – harold

+0

Можете ли вы это объяснить? –

+0

Существует множество существующих ресурсов, которые объясняют двоичную арифметику – redFIVE

ответ

0

a - b = a + (-b), и мы знаем, что для двоичных дополнений вы инвертируете и добавляете один для отрицания числа, поэтому a - b = a + (~ b) + 1

 1 
000110 
+110110 
======= 

так заполнения, что в

001101 
000110 
+110110 
======== 
111101 

и ваш пРОВОДИТЬ является 0, что означает был позаимствовать, я предполагаю, что вы находитесь на x86? иногда выполнять инвертируется, чтобы указать заимствование с 1 против просто переносить. (так же, как вы инвертируете перенос и второй операнд на пути).

, но даже более простой вариант 6-9 означает, что вы должны одолжить так, чтобы в результате флаг переноса указывал на заимствование каким бы то ни было способом вашего процессора указывает, что некоторые указывают на перенос 1, заимствуя некоторую неинвертирующую и перенос 0 заимствует , Аналогично, вычитание с заимствованием, если у вас есть, можно каскадировать при первом вычитании или предыдущем вычитании с учетом более широкой математики.

и 6 - 9 = -3, что равно 111111 .... 1111101, или принять 3 (0b11) инвертировать и добавить один 1111..11100 + 1 = 11111 ... 111101. поэтому ожидаемый результат - 11111 ... 111101 с указанием заимствования.