Борисова 1 семестр / краткая теория 1 лабы Алгоритм перевода из двоичной в десятичную
.docxАлгоритм перевода из двоичной в десятичную:
Число |
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.