Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Борисова 1 семестр / краткая теория 1 лабы Алгоритм перевода из двоичной в десятичную

.docx
Скачиваний:
22
Добавлен:
26.03.2016
Размер:
17.05 Кб
Скачать

Алгоритм перевода из двоичной в десятичную:

Число

1

1

1

1

1

0

1

0

0

1

0

N

10

9

8

7

6

5

4

3

2

1

0

2n

1024

512

256

128

64

32

16

8

4

2

1

1024+512+256+128+64+16+2=2002

Алгоритм перевода из десятичной в двоичную:

413

2

4

206

2

13

0

103

2

12

1

51

2

1

1

25

2

1

12

2

0

6

2

0

3

2

1

1

1100111012=41310

Перевод дробной части

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

0,28125*2 = 0,5625 (целая часть 0)

0,5625*2 = 1,125 (целая часть 1)

0,125*2 = 0,25 (целая часть 0)

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

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

0,281252 = 0,010012

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

Алгоритм перевода из десятичной в шестнадцатеричную:

123456789ABCDEF

413

16

400

25

16

13

16

1

9

19D

Алгоритм перевода из шестнадцатеричной в десятичную:

A3F4= A*163 + 3*162 + F*161 + 4*160 = 10*4096 + 3*256 + 15*16 + 4*1 = 40960 + 768 + 240 + 4 = 41972

Алгоритм перевода из шестнадцатеричной в двоичную

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

A

1010

B

1011

C

1100

D

1101

E

1110

F

1111

BD02E5 =1011 1101 0000 0010 1110 0101

Вместо каждой 16-ричной цифры подставляются 4(!) двоичные

Алгоритм перевода из двоичной в шестнадцатеричную

1001011010011010110 = 0100 1011 0100 1101 0110 = 4B4D6

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

При хранении в памяти компьютера каждый бит хранится в отдельном разряде памяти.

Разряды объединяются в ячейки фиксированного размера – байты, слова.

1 байт – 8 бит.

Максимальное значение одного байта = 25510 (1111 11112)

Один байт используется для хранения одного символа в кодировке ASCII.

Для больших чисел используются более длинные последовательности – слово (2 байта), двойное слово (4 байта), бывает 8 и больше.

В различных языках программирования такие ячейки обозначаются по-разному.

В языке С++:

1 байт – char (целое число или 1 символ)

2 байта – short int или просто short (целые числа)

4 байта – int (целое число) float (вещественное)

8 байт – double (вещественное)

10 байт – long double (вещественное)

Любое число или другая информация хранятся как последовательность 0 и 1.

Целое число дополняется слева нулями.

Наше число 4B4D6 потребует для хранения 3 (но округляем до 4) байт

0000 0000 0000 0100 1011 0100 1101 0110

Если число не помещается в ячейку, самые старшие биты числа теряются.

Сообщение об ошибке может выдаваться либо нет (зависит от настроек компилятора).

Целые числа

Прямой код. Прямой код двоичного числа совпадает по изображению с записью самого числа. Значение знакового разряда для положительных чисел равно 0, а для отрицательных чисел 1.

Обратный код. Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.

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

В любом представлении старший бит определяет знак числа:

0 - положительное число;

1 - отрицательное число

Пример.

Для числа +1101:

Прямой код 0,0001101

Обратный код 0,0001101

Дополнительный код 0,0001101

Для числа -1101:

Прямой код 1,0001101

Обратный код 1,1110010

Дополнительный код 1,1110011

целые отрицательные числа представляются в дополнительном коде!

Если сложить +1101 и -1101 используя дополнительный код, получим 0.