Целые числа в компьютере.
Вся информация, обрабатываемая современными компьютерами, хранится в них в
двоичном виде. Каждая ячейка памяти компьютера состоит из некоторого числа
однородных элементов, обладающих двумя устойчивыми состояниями, одно из которых
соответствует нулю, а другое — единице. Каждый элемент ячейки служит для
изображения одного разряда двоичного числа. Именно поэтому каждый элемент ячейки
называют разрядом.
Знаковое представление чисел в компьютере.
Для человека привычна запись числа в виде
«знак-величина». Чтобы и в компьютере представлять числа в привычном для
человека виде, необходимо самый левый разряд ячейки отвести для записи знака
числа. При записи положительного числа в самый левый разряд ячейки, который
называется знаковым, записывается 0, при записи отрицательного числа
Прямой код положительного числа отличается от прямого кода такого же по модуля отрицательного числа только содержанием знакового разряда. Однако для представления отрицательных чисел в компьютере используется дополнительный код(см. ниже).
В k-разрядной ячейке при представлении целых знаковых чисел умещаются числа [-2k –1, 2k–1–1]. Например, для 8-разрядной ячейки это диапазон [-128, 127]. Таким образом, при программировании нужно помнить о том, что:
- количество представимых чисел в k разрядах ограничено и зависит от k;
- диапазон знаковых чисел, представимых в k-разрядной ячейке, не симметричен относительно 0.
Запишем максимальные и минимальные числа, которые можно записать в 8, 16 и 32
разрядах при знаковом представлении.
Количество разрядов | Минимальное число | Максимальное число |
8 | –27 = –128 | 27 – 1 = 127 |
16 | –215 = –32768 | 215 – 1 = 32767 |
32 | –231 = –2147483648 | 231 – 1 = 2147483647 |
Беззнаковое представление положительных целых чисел в компьютере.
Так как в компьютере все данные хранятся в двоичном виде, то чтобы получить
представление целого положительного числа в компьютере, сначала это число
необходимо перевести в двоичную систему счисления. Если двоичное число состоит
не более чем из k цифр, то это число можно записать в k-разрядной ячейке памяти, дополнив нулями слева до k
разрядов.
Очевидно, что самое большое целое положительное число, которое мы можем
записать в k разрядах, состоит из единиц во всех разрядах ячейки.
Если перевести это число в десятичную систему счисления, то оно равно 2k – 1. Минимальное число состоит из нулей во всех разрядах и
равно 0.
Запишем максимальные числа, которые можно вместить в 8, 16, 32 разрядах.
Количество разрядов | Максимальное число |
8 | 28 – 1 = 255 |
16 | 216 – 1 = 65535 |
32 | 232 – 1 = 4294967295 |
Алгоритм построения дополнительного кода.
В k-разрядной целочисленной компьютерной арифметике 2k = 0, так как единица в самом старшем разряде числа 2k должна стоять в k+1 разряде и следовательно,
«выползает» за границы ячейки. Дополнительный код отрицательного числа,
записанный в k-разрядной ячейке, заменяет это отрицательное число
на дополнение его модуля до числа 2k. То есть
дополнительный код отрицательного числа m равен 2k – |m|. Такая замена позволяет заменить
операцию вычитания чисел на операцию сложения. Действительно, если в 8-разрядной
ячейке сложить числа 5 и –6, где вместо –6 написано число (28 – 6),
то получится 5 + (28 – 6) = 28 – 1, что будет
соответствовать записи числа –1. Поэтому для k-разрядной ячейки дополнительный код отрицательного числа можно получить следующим образом:
- Модуль числа представляется прямым кодом в k разрядах.
- В прямом коде все нули заменяются на единицы, а единицы – на нули. Таким образом получаем обратный код.
- К полученному обратному коду прибавляется единица.
Алгоритм получения числа по дополнительному коду.
- Провести обратную цепочку преобразований: вычесть единицу из дополнительного кода числа, инвертировать полученный результат и перевести его в десятичную систему счисления.
- Построить дополнительный код для имеющегося дополнительного кода и перевести результат в десятичную систему счисления.
Комментариев нет:
Отправить комментарий