§27. Хранение в памяти целых чисел | Целые числа со знаком (курс pol 136 ч.)

Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, полный углубленный курс, 4 часа в неделю)


Урок 31 - 35
Хранение в памяти целых и вещественных чисел. Арифметические и логические (битовые) операции. Маски
§26. Особенности представления чисел в компьютере. §27. Хранение в памяти целых чисел. § 28. Операции с целыми числами. §29. Хранение в памяти вещественных чисел



Содержание урока

§26. Особенности представления чисел в компьютере
§27. Хранение в памяти целых чисел

Целые числа без знака

Целые числа со знаком

Алгоритм А1

Алгоритм А2

Алгоритм А3

Вопросы и задания

Задачи

§28. Операции с целыми числами
§29. Хранение в памяти вещественных чисел

§27. Хранение в памяти целых чисел


Целые числа со знаком


Теперь рассмотрим числа со знаком (англ, signed). Для того чтобы различать положительные и отрицательные числа, в двоичном коде выделяется один бит для хранения знака числа — знаковый разряд. По традиции для этого используют самый старший бит, причём нулевое значение в нём соответствует знаку «плюс», а единичное — знаку «минус». Ноль формально является положительным числом, так как все его разряды, включая знаковый, нулевые.

Поскольку один бит выделяется для хранения информации о знаке, ровно половина из всех 2К чисел будут отрицательными. Учитывая, что одно значение — нулевое, положительных чисел будет на единицу меньше, т. е. допустимый диапазон значений оказывается несимметричным.

Положительные числа записываются в знаковой форме так же, как и в беззнаковой, но для значения остаётся на один разряд меньше. А как поступить с отрицательными числами? Первое, что приходит в голову, это кодировать отрицательные значения точно так же, как и положительные, только записывать в старший бит единицу. Такой способ кодирования называется прямым кодом. Несмотря на свою простоту и наглядность, он не применяется в компьютерах для представления целых чисел 1

. Это неудобно, потому что действия над числами, записанными в прямом коде, выполняются по-разному для разных сочетаний знаков чисел. Поэтому в современных компьютерах отрицательные числа кодируются с помощью другого метода, который менее нагляден, но позволяет выполнять арифметические действия с положительными и отрицательными числами по одному и тому же алгоритму.

Как же представить целые числа, чтобы арифметика выглядела максимально просто? Попробуем, например, вычислить код, соответствующий числу —1. Для этого просто вычтем из нуля единицу:

Чтобы вычитание «состоялось», придется занять из несуществующего старшего бита единицу, что не очень естественно, но зато быстро приводит к правильному результату 2. Заметим, что фактически мы вычитали не из 0, а из 256. В общем случае вычисление происходит по формуле 2К - X, где для данного примера К = 8, а Х = 1.


1 Тем не менее прямой код используется в представлении вещественных чисел.

2 Для проверки можно прибавить к полученному коду единицу, в результате должен получиться ноль.



Однако предложенный способ перевода не слишком хорош, поскольку мы использовали дополнительный «несуществующий» разряд. Вместо этого можно использовать равносильный алгоритм:

256 - X = (255 - X) + 1 = not X + 1.

Здесь «not» обозначает логическую операцию «НЕ» (инверсию), применяемую к каждому биту числа отдельно (все нули заменяются на единицы и наоборот).

Следующая страница Алгоритм А1



Cкачать материалы урока







Наверх