Все есть биты. Компьютерные основы программирования. Представление данных, часть 1

Содержание

Слайд 2

Слайд 3

Слайд 4

Слайд 5

Слайд 6

Машинные слова С машиной связан “размер слова” Обычный размер представления целых

Машинные слова

С машиной связан “размер слова”
Обычный размер представления целых чисел

- Включая адреса
Большинство машин используют слова в 32 бита (4 байта)
- Предел адресации 4ГБ
- Недостаточно для интенсивной работы с памятью
Мощные системы - слова используют в 64 бита (8 байт)
- Потенциальное адресное пространство порядка 1.8 X 1019 байт
- Архитектура x86-64 использует 48- битовые адреса: 256 терабайт
Машины поддерживают множество форматов данных
- Доли размера слова или кратные ему
- Всегда целое число байт
Слайд 7

Слайд 8

Форматы данных

Форматы данных

Слайд 9

Порядок байт в слове В каком порядке располагаются в памяти байты

Порядок байт в слове

В каком порядке располагаются в памяти байты

многобайтового слова?
Соглашения
«Тупоконечники»: Sun, PPC Mac, Internet
Наименее значимый байт имеет наибольший адрес
«Остроконечники»: x86
Наименее значимый байт имеет наименьший адрес
Слайд 10

Примеры упорядочения байт «Тупоконечники»: Sun, PPC Mac, Internet Наименее значимый байт

Примеры упорядочения байт

«Тупоконечники»: Sun, PPC Mac, Internet
Наименее значимый байт

имеет наибольший адрес
«Остроконечники»: x86
Наименее значимый байт имеет наименьший адрес
Пример
Переменная x имеет 4-байтовое представление 0x01234567
Расположена по адресу &x - 0x10
Слайд 11

Чтение байт в обратном порядке Результат дизассемблирования Текстовое представление машинного кода

Чтение байт в обратном порядке

Результат дизассемблирования
Текстовое представление машинного кода
Выдаётся

программой читающей машинный код
Пример фрагмента
Слайд 12

Изучение представления данных Вывод байтового представления данных Представление указателя как массива unsigned char *

Изучение представления данных

Вывод байтового представления данных Представление указателя как массива unsigned

char *
Слайд 13

Пример исполнения show_bytes для int

Пример исполнения show_bytes для int

Слайд 14

Целочисленное представление

Целочисленное представление

Слайд 15

Представлениеуказателей Различные компиляторы, ОС и машины дают различное расположение в памяти

Представлениеуказателей

Различные компиляторы, ОС и машины дают различное расположение в памяти

Слайд 16

Представление строк Строки в C Представлены массивами символов - Каждый символ

Представление строк

Строки в C
Представлены массивами символов
- Каждый

символ представлен ASCII-кодом
- Стандартное кодирование набора символов буквы от A до Zимеют коды 0х41 до 0х5А
- Символ “0” кодируется 0x30
- Цифра i кодируется 0x30+i
- Строки должны завершаться нулевым кодом
- Символ окончания строки = 0
Пример
char *s=“18243”;
show_bytes(s, strlen(s));
Слайд 17

ASCII - American National Standard Code for Information Interchange

ASCII - American National Standard Code for Information Interchange

Слайд 18

Булева алгебра Предложена Джорджем Булем в XIX веке Алгебраическое представление логики

Булева алгебра

Предложена Джорджем Булем в XIX веке Алгебраическое представление логики

Кодирует “Истина” как 1 и “Ложь” как 0
И (And) ИЛИ (Or)
1 когда оба A=1 and B=1 A|B = 1 когда A&B = либо A=1, либо B=1

НЕ(Not)
~A = 1 когда A=0

Исключающее ИЛИ (Xor)
A^B = 1 когда либо A=1, либо B=1, но не оба

Слайд 19

Приложение булевой алгебры Клодом Шенноном применена к цифровым системам Диплом MIT

Приложение булевой алгебры

Клодом Шенноном применена к цифровым системам
Диплом MIT

1937
Рассмотрены схемы реле
Замкнутый контакт кодируется как 1, разомкнутый как 0
Слайд 20

Операции на уровне бита в С Обобщение булевой алгебры

Операции на уровне бита в С

Обобщение булевой алгебры

Слайд 21

Представление и операции с множествами Представление Вектор бит размером w представляет подмножество {0, ¼, w–1}

Представление и операции с множествами

Представление
Вектор бит размером w представляет подмножество

{0, ¼, w–1}
Слайд 22

Слайд 23

Процедура перестановки void inplace_swap(int *x, int *y) {*x=(*x)^(*y); /*step 1*/ *y

Процедура перестановки void inplace_swap(int *x, int *y) {*x=(*x)^(*y); /*step 1*/ *y =(*x)^(*y); /*step

2*/ *x=(*x)^(*y); /*step 3*/ }
Слайд 24

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

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

Слайд 25

Операторы сдвига

Операторы сдвига

Слайд 26

Целочисленное представление натуральные числа без знака 0 1 … 254 255

Целочисленное представление натуральные числа без знака

0 1 … 254 255

255 0 1 - для 8

двоичных символов

1111 11112 = FF16 = 15*16+15 = 25510

Слайд 27

Типы целого в С

Типы целого в С

Слайд 28

Представление отрицательных чисел путем простого выделения бита под знак числа 0*******

Представление отрицательных чисел

путем простого выделения бита под знак числа

0******* - положительное

число

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

Результат:
00000000 = +0 10000000 = -0

путем записи в дополнительном коде: x + (-x) = 0

Слайд 29

Слайд 30

Слайд 31

Слайд 32

Слайд 33

Представление отрицательных чисел ограниченным числом разрядов 255 0 1 100000002 =

Представление отрицательных чисел ограниченным числом разрядов

255 0 1

100000002 = +12810 = -?10

129

128 127

-127 -128

-1 0

25510 = 111111112 = -110

12710 = 011111112

Слайд 34

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

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

Слайд 35

Слайд 36

Слайд 37

Слайд 38

Слайд 39

Пример int x=-1; unsigned u=2147483648; printf(“x = %u = %d\n”,x,x); printf

Пример int x=-1; unsigned u=2147483648; printf(“x = %u = %d\n”,x,x); printf (“u = %u =

%d\n”,u,u); Результат x= 4294967295 = -1 u=2147483648 = -2147483648
Слайд 40

Слайд 41

Слайд 42

Расщирение битового представления числа

Расщирение битового представления числа

Слайд 43

Слайд 44

Пример

Пример

Слайд 45

Добавление к примеру

Добавление к примеру

Слайд 46

Слайд 47

Слайд 48

Слайд 49

Слайд 50

Слайд 51

Слайд 52

Слайд 53

Слайд 54

Слайд 55