Нужна помощь с вычитанием восьмеричных чисел

Итак, я пытаюсь понять разницу между вычитанием восьмеричных чисел без знака и со знаком, если восьмеричные числа были 6 битами. Например, восьмеричное 76 - восьмеричное 64: я сначала конвертирую 76 в двоичное, которое становится 111 110 и 64 в двоичное, которое становится 110 и 100:

Но проблема в том, что если эти восьмеричные числа представляют 6-битные восьмеричные числа со знаком, это будет означать, что 111 110 отрицательное, а 110 100 также отрицательное, что означает, что оператор вычитания отменит отрицательный знак второго восьмеричного числа, в результате чего в дополнение? Или мы просто относимся к этому как обычно, обычно вычитаем 2 двоичных числа, а затем смотрим на знак после?


person CuriousPerson    schedule 23.02.2019    source источник


Ответы (1)


Ваше подписанное заявление не имеет значения.

Возьмем, например, десятичное число -1, которое в 6-битном восьмеричном формате будет 077 (представляющее восьмеричное число с префиксом 0, предполагается представление дополнения до 2).

Затем 077 - 077 = 000, как и ожидалось. В двоичном формате десятичное число -1 равно 111 111. Но - (- 1) равно 1, что является восьмеричным числом 001. 077 - 077 = 077 + 001 = 000 с усеченным переполнением.

Вы также можете напрямую рассматривать арифметику с основанием 8. 076 - 064 = 012. Вместо того, чтобы брать 10, как в десятичной системе, вы заимствуете 8. Рассмотрим 012 - 003. Вы берете 8 из 1 из 012 и добавляете его к 2. 00{8+2} - 003 = 007.

Если 076 подписано (при условии, что это дополнение до 2), то в десятичном формате это -2. Точно так же 064 в десятичной системе счисления равно -12. Разница составляет -2 - (-12) = 10, что в восьмеричном формате равно 012. Нет разницы, со знаком или без.

Знаковое представление может быть наложено после арифметики.

person RJM    schedule 23.02.2019
comment
Ага. Спасибо. - person CuriousPerson; 23.02.2019