Ваша проблема в том, что вы вычитаете 9-битный 111010000
из 10-битного 1111011111
. Двойное дополнение 111010000
- ...11111000110000
, где точки пытаются показать, что вы должны заполнить влево столько битов 1
, сколько вам нужно. Здесь вам нужно 10 битов, поэтому дополнение к 111010000
не равно 000110000
, а 1000110000
.
Итак, вы хотите вычислить 1111011111 + 1000110000 = 11000001111
, который вы просто усекаете до 10 бит, чтобы получить правильный ответ 1000001111
.