В прошлом посте мы представили Двоичные числа. Давайте рассмотрим арифметику двоичных чисел и интересные проблемы тестирования программного обеспечения, которые могут возникнуть. Этот пост соответствует курсу Black Box Software Testing Foundations (BBST), разработанному Ребеккой Фидлер, Джемом Канером и Джеймсом Бахом.

Вот как сложить два 8-битных двоичных числа. Помните, что количество битов — это количество ячеек, в которых мы можем хранить наши двоичные числа.

23 + 18 = 41 23 = 0 0 0 1 0 1 1 1 + 18 = 0 0 0 1 0 0 1 0 41 = 0 0 1 0 1 0 0 1

Запомните следующие простые правила:

1 + 1 = 1 0 => here we have carry by the 1. 1 + 0 = 0 1

Самое большое число, которое мы можем хранить в 8 полях (битах), это:

255 = 1 1 1 1 1 1 1 1

Когда мы добавляем 1 к 255, мы получаем переполнение:

255 = 1 1 1 1 1 1 1 1 1 = 0 0 0 0 0 0 0 1 256 1 0 0 0 0 0 0 0 0

У нас восемь переносов по 1. У последнего переноса нет своего ящика, поэтому вместо 256 мы получили 0! Это часто называют атакой переполнения буфера.

Чтобы хранить 256, нам нужно больше бит. Моя операционная система Mac — 64-битная операционная система, что означает, что она работает с 64-мя ящиками. Этого достаточно для 256. А как насчет больших чисел? Затем мы используем представление десятичных чисел с плавающей запятой.

Как лечить отрицательные числа с помощью двоичного представления? Для этого мы используем крайний левый бит. 1 для отрицательного числа, ноль для положительного. Используемый алгоритм называется двумя дополнениями. Используя 8 бит и два дополнения, мы можем хранить числа от -128 до 127. Вот расчет:

127 = 0 1 1 1 1 1 1 1 => leftmost bit is zero, which is + sign, and seven 1 are 127. -128 = 1 0 0 0 0 0 0 0 => leftmost bit is - sign.

инвертировать каждую цифру

= 0 1 1 1 1 1 1 1 add 1 = 1 0 0 0 0 0 0 0 => this is 128, so final result is (-) 128

Первоначально опубликовано на https://blog.tentamen.eu 18 ноября 2019 г.