= 6 - 9
= 00000110-00001001
= 00000110+(11110110+1)
= 00000110+11110111
= 11111101
Здесь мы не можем видеть, как переносится так, как флаг переноса включен? Я новичок в программированииПочему в этом вычитании включен флаг переноса
= 6 - 9
= 00000110-00001001
= 00000110+(11110110+1)
= 00000110+11110111
= 11111101
Здесь мы не можем видеть, как переносится так, как флаг переноса включен? Я новичок в программированииПочему в этом вычитании включен флаг переноса
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 с указанием заимствования.
Потому что верхний бит заимствует. – harold
Можете ли вы это объяснить? –
Существует множество существующих ресурсов, которые объясняют двоичную арифметику – redFIVE