Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОАиП Лекция 1. Системы счисления.doc
Скачиваний:
14
Добавлен:
26.03.2016
Размер:
141.31 Кб
Скачать

Вещественные числа (числа с плавающей точкой)

Знак

Все равные по абсолютному значению положительные и отрицательные числа отличаются только этим битом. В остальном числа с разным знаком полностью одинаковы. Для представления отрицательных чисел здесь не используется дополнительный код.

Мантисса

Поле мантиссы содержит мантиссу нормализованного числа.

Нормализованное число, это число, у которого в целой части одна цифра (раз число двоичное, это всегда 1 и она не хранится в памяти компьютера, только подразумевается), а остальные цифры после запятой.

Таким образом, в память записываются цифры мантиссы, начиная со второй и справа дополняются нулями.

Порядок

У нашего числа порядок может быть положительным и отрицательным (если само число меньше 1). Но в секции порядка не предусмотрен отдельный бит для знака. Поэтому порядок наращивается на такую величину, чтобы он гарантированно был положительным.

для 8 бит – на 127

для 11 бит – на 1023

для 15 бит – на 16383

Таким образом, извлекая число из памяти, мы делаем следующие преобразования:

Одинарная точность:

1.(цифры мантиссы)*2(P-127)

Двойная точность:

1.(цифры мантиссы)*2(P-1023)

Расширенная точность:

1.(цифры мантиссы)*2(P-16383)

Пример.

Запишите код действительного числа, интерпретируя его как величину типа float.

а) 446,15625;

Переводим десятичное число в двоичное представление.

Целая часть от деления

Остаток от деления

446 div 2 = 223

446 mod 2 = 0

223 div 2 = 111

223 mod 2 = 1

111 div 2 = 55

111 mod 2 = 1

55 div 2 = 27

55 mod 2 = 1

27 div 2 = 13

27 mod 2 = 1

13 div 2 = 6

13 mod 2 = 1

6 div 2 = 3

6 mod 2 = 0

3 div 2 = 1

3 mod 2 = 1

1 div 2 = 0

1 mod 2 = 1

Остаток от деления записываем в обратном порядке. Получаем число в 2-ой системе счисления: 110111110

446 = 1101111102

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

0.15625*2 = 0.3125 (целая часть 0)

0.3125*2 = 0.625 (целая часть 0)

0.625*2 = 1.25 (целая часть 1)

0.25*2 = 0.5 (целая часть 0)

0.5*2 = 1 (целая часть 1)

Получаем число в 2-ой системе счисления: 00101

0.15625 = 0.001012

446.15625 = 110111110.001012= 1.10111110001012*28

Знак S = 0

Порядок P = 8 + 127=135=

Мантисса: 1011111000101

Для числа с двойной точностью мантисса занимает 52 разряда. Добавляем нули.

Мантисса: 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000

Запишем число:

0 10000000111 1011 1110 0010 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000

В шестнадцатеричной системе счисления: 407BE2800000000016

Битовые операции

При любых операциях биты, переходящие за левую границу числа, теряются.

Операция инвертирования ~

Все биты меняются на противоположные, кроме знакового.

Операции сдвига

7 << 2

7 >> 2

Логические операции

их всего 2

  1. логическое сложение (or, ||) истина, если хотя бы один аргумент истина

  2. логическое умножение (and, &&) истина, если оба аргументы истинны

битовая

  1. исключающее или (xor, ^) истина, если аргументы разные

Результат логической операции – всегда 0 или 1.

В языке С++ при выполнении логических операций только 0 интерпретируется как ложь. Любое другое число – истина. (это для аргументов)

Битовые операции

Аналогичны логическим, но выполняются над парами битов

| & ^

10 | 7

0000 1010

0000 0111

0000 1111 = 15

10 & 7

0000 1010

0000 0111

0000 0010 = 2

10 ^ 7

0000 1010

0000 0111

0000 1101 = 13

Но 10 || 7 = 1

10 && 7 = 1