Операции над числами с фиксированной точкой

Операции над числами с фиксированной точкой аналогичны операциям с целыми десятичными числами.
Задача. Сложить положительные числа 01001101 и 00011011.
Решение. Складываем столбиком:

  •  
    •  
      •  
        •  
          •  
            •  
                01001101
                +00011011
                0

- т. к. 1+1 = 210 = 102, то 0 записываем, 1 - в уме.

  •  
    •  
      •  
        •  
          •  
            •  
                01001101

                +00011011

                00

- т. к. 0+1+1(которое было в уме) = 210 = 102, то 0 записываем, 1 - в уме.

 

  •  
    •  
      •  
        •  
          •  
            •  
                01001101
                +00011011
                000

- т. к. 1+0+1(которое было в уме) == 210 = 102, то 0 записываем, 1 - в уме.

 

  •  
    •  
      •  
        •  
          •  
            •  
                01001101
                +00011011
                1000

- т. к. 1+1+1(которое было в уме) = 310 = 112, то 1 записываем, 1 - в уме

  •  
    •  
      •  
        •  
          •  
            •  
                01001101
                +00011011
                01000

- т. к. 0+1+1 (которое было в уме) = 210 = 102, то 0 записываем, 1 - в уме.

  •  
    •  
      •  
        •  
          •  
            •  
                01001101
                +00011011
                0 01000
  •  
    •  
      •  
        •  
          •  
            •  
                01001101
                +00011011
                1001000
  • т. к. 0+ 0+1 (которое было в уме) = 110 = 12, то 1 записываем.


- т. к. 1 + 0 = 110 = 12, то 1 записываем.

  •  
    •  
      •  
        •  
          •  
            •  
                01001101
                +00011011
                010001000

- т. к. 0+ 0 = 010 = 02, то 0 записываем.

Ответ. Число 01001000.

Задачи на операции с отрицательными числами сводятся к преобразованию отрицательных чисел в положительные, операциям с положительными числами с положительным результатом и преобразованию положительного результата в отрицательный, если результат должен быть отрицательным.
Задача.
Сложить
а) числа A == 10100101 и В = 00001011 в прямом,
б) числа A = 11011010 и В = 00001011 в обратном и
в) числа A = 11011011 и В = 00001011 в дополнительном кодах.
Считать, что для представления целого числа используется 8 бит.
Решение.
а) A - отрицательное, т. к. старший бит равен 1. В - положительное, т. к. его старший бит равен 0. Абсолютное значение A равно 00100101. Оно больше абсолютного значения В. Поэтому результат сложения A + В будет отрицательным.
Для получения положительного результата найдем (-A) - В, а затем изменим знак результата и получим -((-A) - В) = A + В.
Итак, ищем (-A) - В. -А = 00100101. В = 00001011. Вычитаем в столбик:

  •  
    •  
      •  
        •  
          •  
            •  
                00100101

                +00001011
                0

Дальше придется заимствовать 102 из 2-го разряда (если отсчет разрядов вести с 0). Так как 102 - 012 = 012, то получаем:

  •  
    •  
      •  
        •  
          •  
            •  
                00100101

                +00001011

                010

Дальше придется заимствовать 1002 из 5-го разряда. Так как 1002 - 0012 = 0112, то получаем:

  •  
    •  
      •  
        •  
          •  
            •  
                00100101

                +00001011

                00011010

Полученное число 000110102 - это (-A) - В. Чтобы найти A + В, надо взять это полученное число с обратным знаком. Поскольку в прямом коде отрицательное число отличается от положительного лишь содержимым старшего разряда, то результат равен 1001101102.
б) A отрицательное, так как в старшем разряде имеет 1. Следовательно, абсолютное значение A равно -A. В обратном коде получается из A инвертированием всех битов. Получается, что абсолютное значение A равно 00100101, как и в задаче а).
Решаем аналогично а). Находим (-A) - В.

  •  
    •  
      •  
        •  
          •  
            •  
                00100101

                +00001011

                00011010

Получили, что (-A) - В имеет компьютерное представление 00011010. Найдем представление -((-A) - В). В обратном коде для этого надо инвертировать (обратить) все биты: 11100101. Значит, ответ равен 11100101.
б) A отрицательное, так как в старшем разряде имеет 1. Следовательно, абсолютное значение A равно -A. В дополнительном коде положительное число получается из отрицательного вычитанием 1 из младшего бита и инвертированием всех битов. Вычитание 1 из младшего бита числа 11011011 дает 11011010, а инвертирование - 00100101. Получается, что абсолютное значение A (то есть -A) равно 00100101, как и в задачах а) и б).

Решаем аналогично а) и б). Находим (-А) - В.

  •  
    •  
      •  
        •  
          •  
            •  
                00100101

                +00001011

                00011010

Получили, что (-А) -- В имеет компьютерное представление 00011010. Найдем представление -((-А) - В). В дополнительном коде для этого надо инвертировать (обратить) все биты: 11100101 и прибавить к младшему биту 1.
Инвертирование дает число 11100101. Прибавляем 1.
00100101
+ 1
11100110 Ответ в задаче 1в): 11100110.

Другие записи

10.06.2016. Представление чисел с плавающей точкой. Операции над числами с плавающей точкой
    3.3. Представление чисел с плавающей точкой Представление чисел с плавающей точкой - это представление числа с помощью двух других чисел: мантиссы (дробь от 0 до 0.999 ... ) и…