| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > байты и биты |
| Автор: Dexter 6.9.2002, 21:08 |
| (Вопрос может показаться очень тупым и примитивным) Я не очень много знаю по этому вопрсу так что исправьте если я че напортачил. Так вот: я так понимаю, что любой символ кодируется восемью нулями и единицами (всего символов 256), и вся "матрица" ANSI представляет собой (как бы) массив из 256 элементов. Каждый элемент - символ. Так вот (я че-то увлекся) почему при создании компьютерных технологий (или как там это называется) закодировали каждый симво именно 8 нулями и единицами, ведь если их было бы больше то и символов могло быть больше. (вроде все). Еще раз повторяю не судите строго, я в этом хреново разбираюсь И если можно кинте адресок где можно про это почитать |
| Автор: Vit 6.9.2002, 22:58 |
| Вся матрица это массив из 8 битов, количество комбинаций 8 элементов, каждый из которых может иметь 2 значения (0, 1) и даёт 256 возможных вариантов: 0000 0000 - 0 0000 0001 - 1 0000 0010 - 2 0000 0011 - 3 0000 0100 - 4 0000 0101 - 5 0000 0110 - 6 0000 0111 - 7 0000 1000 - 8 0000 1001 - 9 0000 1010 - 10 0000 1011 - 11 0000 1100 - 12 0000 1101 - 13 0000 1110 - 14 0000 1111 - 15 и т.д. |
| Автор: December 6.9.2002, 23:11 |
| Во имя экономии памяти и оптимизации скорости обработки избрали именно 8-и кратную систему. Другие основания тормозили бы как вывод на экран, так и всё остальное. |
| Автор: Vit 6.9.2002, 23:16 |
| Не так чтоб сразу, я работал на системах с основаниями 5, 6, 7 - увеличение основания происходило с увеличением вычислительной мощности. А сейчас активно проталкиваются Unicode как стандарт, которые есть суть 16 битная система |
| Автор: Dexter 7.9.2002, 02:58 | ||
Че то я с трудом въезжаю можно как нибудь попроще |
| Автор: Vit 7.9.2002, 03:20 |
| Представь себе 2 шахматные клетки. На них должно стоять по 1й шашке, сколько возможно комбинаций? Очевидно 4: 1) чёрная | чёрная 2) чёрная | белая 3) белая | чёрная 4) белая | белая Это понятно? Другими словами двумя шахматными клетками можно закодировать 4 варианта значений. Например у меня перед кабинетом стоит шахматный столик, и я условился с сотрудниками, что перед уходом из кабинета я буду оставлять там шашки, и по ним можно определить куда я ушёл: Если на столе стоят: чёрная | чёрная - то я ушёл в библиотеку чёрная | белая - то я ушел в столовую белая | чёрная - то я ушел домой белая | белая - то я пью кофе в соседней лаборатории Таким образом у меня закодировано 4 разных варианта ("ушёл в библиотеку","ушел в столовую", "то я ушел домой", "пью кофе в соседней лаборатории") при помощи 2 клеток и шашек которые могут быть либо чёрными либо белыми. Теперь обозначим цвет цифрами: 0 - чёрный 1 - белый Таким образом можно обозначить что: 0 | 0 - то я ушёл в библиотеку 0 | 1 - то я ушел в столовую 1 | 0 - то я ушел домой 1 | 1 - то я пью кофе в соседней лаборатории Естественно, что если использовать больше клеток то можно закодировать большее число вариантов. Например если взять 3 клетки то можно закодировать 8 вариантов: чёрная | чёрная | чёрная чёрная | чёрная | белая чёрная | белая | чёрная чёрная | белая | белая белая | чёрная | чёрная белая | чёрная | белая белая | белая | чёрная белая | белая | белая Или в цифровом выражении: 0 | 0 | 0 0 | 0 | 1 0 | 1 | 0 0 | 1 | 1 1 | 0 | 0 1 | 0 | 1 1 | 1 | 0 1 | 1 | 1 Идя дальше 8 шахматных клеток могут закодировать 256 возможных вариантов. Теперь чуть чуть изменим терминологию: 1 шахматную клетку назовём бит - очевидно что она может передать только 2 варианта ("чёрный/белый" или "0/1" или "True/False" или "Yes/No") 8 шахматных клеток которые могут передать (кодировать) 256 вариантов значений назовём байтом. Каждый возможный вариант раскладки шашек по 8 ячейкам у нас будет кодировать букву, цифру или спец.символ, этот набор кодируемых значков обзовём ASCII или ANSI таблицей. |
| Автор: Dexter 7.9.2002, 03:28 |
| Понятно. А в самом начале я правильно написал? |
| Автор: Vit 7.9.2002, 03:30 | ||
Нет, вот здесь неправильно. Эта матрица - это массив из 8 элементов и никак иначе |
| Автор: Dexter 7.9.2002, 20:37 |
| но всего ведь элементов 256 и каждый с уникальным порядком 1 и 0. И где в Инете можно почитать про это |
| Автор: suborg 7.9.2002, 20:48 |
| упрощаем понимание: в двоичной системе если каждую цифру числа умножить на нужную степень двойки, и результаты сложить, получится десятичное число. Проще: умножать надо на (по порядку слева направо) 128, 64,32,16,8,4,2,1. Еще проще: 0101 в двоичном коде будет 0*8 + 1*4 + 0*2 + 1*1, получится 5, значит двоичное число 0101 означает нашу пятёрку. Теперь усложним - двоичное число 00000101 если так же домножить, тоже получится пятёрка, теперь возьмём таблицу символов ASCII и увидем, что под номером пять там находится такой-то символ (не помню какой Графический адаптер например при работе в текстовом режиме, считывает из памяти байт для каждого знакоместа на экране, и соответственно значению этого байта вырисовывает какой ни будь символ на экране, номер символа в таблице опять же определяется значением этого байта, ну, а каждому номеру символа в таблице приписано своё начертание - это уже шрифт. Фу, кажется опять усложнять начал |
| Автор: Dexter 8.9.2002, 20:46 |
| Хотя я все понял, я чувствую себя полным ламером |
| Автор: cosmic 28.9.2002, 19:33 | ||
Dexter, зачем тебе больше? не хватает 256? в принципе, (ради пущего съезжания крыши (щас вые#####сь, "...сколько разрядов в минимально-адресуемой единице памяти на конкретной машине" правда я слышал только об алгоритме Hafman'а, в котором символ кодируется неповторимой последовательностью битов нефиксированной длины. чем чаще встречается какой-то символ - тем короче последовательность, которая его кодирует. где почитать про это - не знаю. я это в какой-то "левой" книжке увидел. |
| Автор: PILOT 2.10.2002, 08:36 |
| Каждому символу соответствует число (0-255) Каждое число может быть записано в разных системах счисления, в двоичной, например. Число символов, которое устраивало всех (для набивания текста+простые таблицы) в текстовом режиме было около 190. Т.к. компутер понимает двоичную систему и т.к. минимальное число близкое к 190 и являющееся степенью 2-х (двоичная система) есть 256, т.е. это 2 в степени 8. мы пишем 0 в десятичной, это есть 00000000 в двоичной. пишем 36 в десятичной, это есть 00100100 в двоичной, почему так? Номера бит (нулевой всегда младший, 7 старший: т.е. любой отсчет идет с нуля): 7 6 5 4 3 2 1 0 - это байт, из 8-ми бит. 128 64 32 16 8 4 2 1 - это вес разрядов, так же как в десятичной системе десятки, 1000 100 10 1, где 9 это максимальный разряд, а тут максимальный разряд 1, т.е. сначала 0, потом 1, потом 10, потом 11 и т.д. Т.е. перенос сразу после 1-цы, а в 10-чной системе после 9-ки. Итак 01000100: Как узнать что это за число в десятичном виде: просто берем и складываем веса разрядов. нулевой разряд = 0 , с ним нечего делать и первый 0, они пустышки, теперь 2-ий = 1. Ага 3-й это значит 4 (2^2=4), дальше опять нули, до 6-го разряда (справа налево разряды считаем), 6-ый разряд = 1, ага это 64, т.к. 2^6=64 (а в уме те 4 держим). Дальше по разрядам все нули. Теперь складываем 64+4=66. 66 в десятичной системе есть 01000100. Вот и все. СУВ. -Морковь будете? -Да, пожалйста. -Разрезать? -Спасибо... -Покрошить? -Да-а!! -Разжевать????? |
| Автор: Dexter 3.10.2002, 01:59 |
| Вопрос был вобщем-то не по этой теме, и из двоичной системы в десятичную я умею переводить (с помощью калькулятора (шутка). |
| Автор: PILOT 4.10.2002, 05:34 | ||
Для тех кто читает спустя рукава, повторяем: Число символов, которое устраивало всех (для набивания текста+простые таблицы) в текстовом режиме было около 190. Т.к. компутер понимает двоичную систему и т.к. минимальное число близкое к 190 и являющееся степенью 2-х (двоичная система) есть 256, т.е. это 2 в степени 8. СУВ ЗЫ. Добавлю, что есть еще 16-ричная система, в которой второй перенос происходит при переходе с 255 на 256. Т.е. очень удобно (16-ной системой пользуются любой программист... и не очень). |
| Автор: Kesh 5.10.2002, 05:10 | ||||||||
Я тут вот откопал кое-что из старых лекций.... Элементы теории кодирования. Пусть задан некоторый алфавит A={a1,a2,...,ak}, если известна вероятность появления каждого символа этого алфавита в тексте, то будем говорить, что задан ансамбль сообщений... {[a1,p1],[a2,p2],...,[ak,pk]}, где pi - вероятность появления события ai, т.е. все pi>=0, p1+p2+...+pk=1. Кодовый алфавит двоичный {0,1}. Кодированием называется операция, с помощью которой каждому сообщению ансамбля ставится в соответствие кодовое слово. Кодирование должно удовлетворять следующим двум условиям: 1. (Однозначность(обязат)) Необходимо сохранить однозначность декодирования. 2. (Экономичность(желат)) желательно, чтобы среднее количество кодовых символов, затрачиваемых на кодирование сообщения ансамбля было минимальным. Два вида кодирования:
Давайте посчитаем теперь среднюю длину символа в сообщении при "понтовом" кодировании: 2*(1/4)*2+3*(1/8)*2+4*(1/16)*4=2,75<3, немного поясню: каждое слагаемое состоит из 3-х сомножителей, первый из которых - длина символа, второй - вероятность появления символа с данной длинной кода, третий - количество таких символов в кодовом алфавите. При этом выполняется условие однозначности декодирования (префиксное условие). Это условие состоит в следующем: никакое более короткое кодовое слово не может быть началом (префиксом) более длинного кодового слова. Кодовое дерево.
Все вершины кодового дерева делятся на 2 класса: промежуточные и концевые. Кодовые наборы любого кода соответствуют концевым вершинам кодового дерева, а не промежуточным. Метод оптимального кодирования. Метод Хаффмана. Допустим, что нам надо закодировать 7 символов в двоичном кодовом алфавите... Символ | Вероятность a1 0,23 a2 0,19 a3 0,16 a4 0,14 a5 0,12 a6 0,9 a7 0,7 покажем алгоритм кодирования
Вот в общем-то и все... Не рассказал еще о кодах, обнаруживающих и исправляющих ошибки, да думаю это никому не интересно... :0) P.S. Если у кого возникнут какие вопросы - пишите... |
| Автор: Gets 2.2.2004, 14:35 |
| Ну а если быть точным, то систем исчисления бывает очень много, т.е. много можно придумать, как считать числа и какие брать основания. Самые известные из них хто десятичная (0...9), двоичная (0,1), восьмиричная (0...7) и шестнадцатиричная (0...A,B,C,D,E,F). |
| Автор: Dr.Death 2.2.2004, 17:38 |
| Dexter - Купи саму дешевую книжку по информатике для школ, там должно это быть. |
| Автор: __vi 2.2.2004, 19:23 |
| Восемь бит использовали потому-что стандарт ASCII предусматривал 128 символов, и если ты не знаеш то 8 бит это 1 байт. Так вот 127 в двоичной системе что-то втоде 01111111. (Битовую адресацию современные компьютеры не подерживают (т.е. минимум можно указать на байт)) Как видиш один бит мы не используем. Поетому остальные 128 символов используют для локального алфавита или для специальных символов. ЗЫ Ели сдержал себя от мата |
| Автор: podval 2.2.2004, 21:37 | ||
Модератор: Не нужно фанатизма! Вопрос задан очень давно (см. дату создания темы) и не Dexter эту тему вытащил из небытия. Подобные выпады неуместны. |
| Автор: __vi 3.2.2004, 18:36 |
| Ok, ok, sorry. |