блог админа
♦ десятичная и двоичная системы счисления;
♦ развернутая форма записи числа;
♦ перевод двоичных чисел в десятичную систему;
♦ перевод десятичных чисел в двоичную систему;
♦ арифметика двоичных чисел.
В данной главе речь пойдет об организации вычислений на компьютере. Вычисления связаны с хранением и обработкой чисел.
Компьютер работает с числами в двоичной системе счисления.
Эта идея принадлежит Джону фон Нейману, сформулировавшему в 1946 году принципы устройства и работы ЭВМ. Выясним, что такое система счисления.
Десятичная и двоичная системы счисления
Системой счисления называют определенные правила записи чисел и связанные с ними способы выполнения вычислений.
нас будут интересовать двоичная и десятичная системы счисления.
Система счисления, к которой мы все привыкли, называется десятичной. Объясняется это название тем, что в ней используются десять цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Число цифр определяет основание системы счисления. Если число цифр — десять, то основание системы счисления равно десяти. В двоичной же системе существует всего две цифры: 0 и 1. Основание равно двум. Возникает вопрос, можно ли с помощью всего двух цифр представить любую величину. Оказывается, можно!
Развернутая форма записи числа
Вспомним принцип записи чисел в десятичной системе счисления. Значение цифры в записи числа зависит не только от самой цифры, но и от места расположения этой цифры в числе (говорят: от позиции цифры). Например, в числе 333 первая справа цифра обозначает: три единицы, следующая — три десятка, следующая — три сотни. Этот факт можно выразить равенством:
33310 = 3 · 10 2 + 3 · 10 1 + 3 · 10 0 = 300 + 30 + 3.
В данном равенстве выражение, стоящее справа от знака «равно», называется развернутой формой записи многозначного числа. Вот еще пример развернутой формы записи многозначного десятичного числа:
825710 = 8 · 10 3 + 2 · 10 2 + 5 · 10 1 + 7 · 10 0 = 8000 + 200 + 50 + 7.
Таким образом, с продвижением от цифры к цифре справа налево «вес» каждой цифры увеличивается в 10 раз. Это связано с тем, что основание системы счисления равно десяти.
Перевод двоичных чисел в десятичную систему
А вот пример многозначного двоичного числа:
Двойка внизу справа указывает на основание системы счисления. Это нужно для того, чтобы не перепутать двоичное число с десятичным. Ведь существует же десятичное число 110101! Вес каждой следующей цифры в двоичном числе при продвижении справа налево возрастает в 2 раза. Развернутая форма записи данного двоичного числа выглядит так:
1101012 = 1 · 2 5 + 1 · 2 4 + 0 · 2 3 + 1 · 2 2 + 0 · 2 1 + 1 · 2 0 = 5310.
Таким способом мы перевели двоичное число в десятичную систему.
Переведем в десятичную систему еще несколько двоичных чисел.
102 = 2 1 = 2; 1002 = 2 2 = 4; 10002 = 2 3 = 8;
100002 = 2 4 = 16; 1000002 = 2 5 = 32 и т. д.
Таким образом, получилось, что двузначному десятичному числу соответствует шестизначное двоичное! И это характерно для двоичной системы: быстрый рост количества цифр с увеличением значения числа.
Вот как выглядит начало натурального ряда чисел в десятичной (А10) и двоичной (А2) системах счисления:
A10 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
A2 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 |
A10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
A2 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 | 10001 | 10010 | 10011 | 10100 |
Перевод десятичных чисел в двоичную систему
Как перевести двоичное число в равное ему десятичное, вам должно быть понятно из рассмотренных выше примеров. А как осуществить обратный перевод: из десятичной системы в двоичную? Для этого нужно суметь разложить десятичное число на слагаемые, представляющие собой степени двойки. Например:
1510 = 8 + 4 + 2 + 1 = 1 · 2 3 + 1 · 2 2 + 1 · 2 1 + 1 · 2 0 = 11112.
Это сложно. Есть другой способ, с которым мы сейчас и познакомимся.
Существует процедура, позволяющая легко выполнить перевод десятичного числа в двоичную систему. Она состоит в том, что данное десятичное число делится на 2. Полученный остаток — это младший разряд искомого числа. Полученное частное снова делится на 2, полученный при этом остаток — это следующий разряд искомого числа. Так продолжается до тех пор, пока частное не станет меньше двойки (основания системы). Это частное — старшая цифра искомого числа.
Существуют два способа записи деления на 2. Продемонстрируем это на примере перевода числа 37 в двоичную систему.
Здесь а5, а4, а3, а2, а1, а0 — обозначения цифр в записи двоичного числа по порядку слева направо. В результате перевода получим: 3710 = 1001012.
Арифметика двоичных чисел
Правила двоичной арифметики гораздо проще правил десятичной арифметики. Вот все возможные варианты сложения и умножения однозначных двоичных чисел.
0 + 0 = 0 0 x 0 = 0
0 + 1 = 1 0 x 1 = 0
1 + 0 = 1 1 x 0 = 0
1 + 1 = 10 1 x 1 = 1
Своей простотой и согласованностью с битовой структурой компьютерной памяти двоичная система счисления и привлекла изобретателей компьютера. Ее гораздо проще реализовать техническими средствами, чем десятичную систему.
Вот пример сложения столбиком двух многозначных двоичных чисел:
А теперь посмотрите внимательно на следующий пример умножения многозначных двоичных чисел:
1101101
x 101
1101101
1101101
1000100001
После небольшой тренировки любой из вас такие вычисления будет выполнять автоматически.
Коротко о главном
Система счисления — определенные правила записи чисел и связанные с этими правилами способы выполнения вычислений.
Основание системы счисления равно количеству используемых в ней цифр.
Двоичные числа — числа в двоичной системе счисления. В их записи используются две цифры: 0 и 1.
Развернутая форма записи двоичного числа — это его представление в виде суммы степеней двойки, умноженных на 0 или на 1.
Использование двоичных чисел в компьютере связано с битовой структурой компьютерной памяти и простотой двоичной арифметики.
Вопросы и задания
1. Назовите преимущества и недостатки двоичной системы счисления по сравнению с десятичной.
2. Какие двоичные числа соответствуют следующим десятичным числам:
128; 256; 512; 1024?
3. Чему в десятичной системе равны следующие двоичные числа:
1000001; 10000001; 100000001; 1000000001?
4. Переведите в десятичную систему следующие двоичные числа:
101; 11101; 101010; 100011; 10110111011.
5. Переведите в двоичную систему счисления следующие десятичные числа:
2; 7; 17; 68; 315; 765; 2047.
6. Выполните сложение в двоичной системе счисления:
11 + 1; 111 + 1; 1111 + 1; 11111 + 1.
7. Выполните умножение в двоичной системе счисления:
111 · 10; 111 · 11; 1101 · 101; 1101 · 1000.
Задание 8. Укажите, какое из чисел 1100112, 1114, 358 и 1B16 является:
Переведём все числа в десятичную систему счисления:
1100112 = 5110
1114 = 2110
358 = 2910
1B16 = 2710
а) Наибольшее: 1100112
б) Наименьшее: 1114
Минимальное основание – 5. Это пятеричная система счисления, так как в записи у одного из чисел присутствует цифра 4. 1235 = 1*25 + 2*5 + 3*1 = 3810
2225 = 6210
1115 = 3110
2415 = 7110
Срочно помогите! 1. Какие системы счисления относятся к компьютерным?
2. В чем преимущество хранения числовой информации в 8-ричной и 16-ричной системах перед двоичной системой?
3. Каков алфавит 8-ричной системы?
4. Каков алфавит 16-ричной системы?
5. В чем суть алгоритма записи чисел в развернутой форме? К чему это приводит?
6. В чем суть алгоритма перевода десятичного числа в любую систему счисления?
ПОМОГИТЕ ДЕВОЧКЕ РЕШИТЬ ЗАДАЧУ В ПИТОНЕ Дана строка-предложение на русском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной … буквы. Словом считать набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки. Слова, не начинающиеся с буквы, не изменять.
Разработать программу вычисления значений заданных функций для произвольных значений исходных данных. Выполнить тестовый расчет и расчет для заданных … значений исходных данных.
1. Абзац – это: текст в литературе; текст, написанный с большой буквы; текст, ограниченный клавишей Enter; другой ответ. 2. Форматирование абзаца вклю … чает в себя: изменение гарнитуры шрифта; начертание; выравнивание; вставка графических объектов. 3. Установить красную строку можно при помощи: горизонтальной линейки; меню Формат – Абзац; вертикальной линейки; клавиши Enter. 4. Какие существуют типы выравнивания абзацев? по центру, по ширине, по правому краю, по левому краю; по верху, по низу, по правому краю, по левому краю; никаких типов выравнивания абзацев не существует. 5. Программа, предназначенная для создания простых сообщений и текстов – это: графический редактор; текстовый редактор; документ; файл. 6. Произвольная последовательность символов – отдельное слово, строка, абзац, страница и даже весь вводимый текст, это: редактирование; документ; фрагмент. 7. Этап подготовки документа на компьютере, в ходе которого исправляются обнаруженные ошибки и вносятся необходимые изменения форматирование; редактирование; оформление. 8. Шрифт – это: выполненные в едином стиле изображения символов, используемых для письма; набор специальных знаков для отображения информации; минимальная графическая единица текста. 9. Единицей измерения размера шрифта является: миллиметр; пункт; дюйм; сантиметр. 10. Расстояние между строками может быть: одинарным, полуторным, двойным; обычным, разреженным, уплотнённым; любым. 11. Наименьшая графическая единица текста – это: цифра; буква; знак; символ. 12. Укажите форматы текстовых файлов: txt; аvi; doc; odt; mp3; jpeg; gif; rtf. 13. Чтобы перейти на новый абзац необходимо: нажать и удерживать клавиши Ctrl+Enter; нажать клавишу Enter; нажать клавишу Ctrl; нажать клавишу Alt. 14. Ориентация страницы, при которой высота страницы больше ее ширины, называется: книжной; альбомной; произвольной. 15. Ориентация страницы, при которой высота страницы меньше ее ширины, называется: книжной; альбомной; произвольной.
Вправа 4. Створи програму для розв’язання задачі “Бульбашки» та перевір правильність її виконання. Задача “Бульбашки» Селенія, Артур і Барахлюш сидять … у бульбашках у водопроводній трубі і чекають, хто перший випливе. Першою потік води винесе найбільшу бульбашку, другою — середню, останньою – найменшу. Користувач має ввести значення розмірів бульбашок кожного персонажа (у мм), після чого програма має вивести ці значення в порядку їх зменшення. Поки що в порядку зменшення достатньо вивести лише розміри бульбашок, а naunOTI YTO порошоміn и мій шоnni nnnnn било понаш опn Готово
Помогите решить лабораторную по Алгебре логики Создать документ Word, в котором поочередно составить таблицы истинности для следующих функций: F=A∪B∩ … A F=A∪¯B∩A F=(A∪¯B)∩A F=¯(A∪B)→A∩B F=(A∪B→A)∩¯B F=¯(A∪(B↔A))∩B
Что делает следующий цикл for? Каково финальное значение переменной sum? var sum = 0; for(var i = -100; i <= 100; i++)
1. Напишите программу на Python для суммирования всех элементов в списке. 2. Напишите программу на Python, чтобы получить наибольшее число из списка.p … .s. тупым малолеткам не спамить, сразу в бан
Программисты вы тут ? Помогите :3 Питон 1. Напишите программу на Python для суммирования всех элементов в списке. 2. Напишите программу на Python, что … бы получить наибольшее число из списка.
Автоматизированный перевод числа из одной позиционной системы счисления в другую
Основываясь на принципе единственности разложения числа на сумму чисел, являющихся степенями целевой системы счисления (об этом принципе говорилось выше), мы можем автоматизировать процесс перевода числа из одной позиционной системы счисления в другую, написав специальную программу. Давайте проанализируем то, как она работает.
Во-первых, видно, что это никакой не ассемблер (пока что!), а самый настоящий Pascal (программа может быть скомпилирована с помощью GNU Pascal , см.: http://www.gnu-pascal.de/gpc/h-index.html ). Она может работать с 2-ной, 3-ной, 4-ной, 5-ной, 6-ной, 7-ной, 8-ной, 9-ной, 10-ной системами счисления.
Сначала пользователю предлагается ввести основание системы счисления, из которой число (задаваемое позже) будет переводиться во все остальные системы счисления. Чтение ввода осуществляется с помощью функции readln .
Далее функция val проверяет, является ли вводимое значение целым положительным числом. Если не является, то выдаётся соответствующее сообщение об ошибке и программа завершает работу.
Если указанное пользователем основание системы счисления является допустимым, то программа запрашивает ввод числа, которое необходимо проанализировать (перевести в другие системы счисления). Этот запрос снова выполняется функцией readln , которая принимает ввода пользователя и записывает его в переменную k : readln(k) .
А вот теперь начинается самое интересное. Если основание системы счисления, в которой представлено анализируемое число равно 10, то выполняется блок кода, осуществляющий перевод этого числа во все остальные системы счисления, поддерживаемые программой (2-ную, 3-ную, 4-ную, 5-ную, 6-ную, 8-ную, 9-ную).
Давайте разберём этот блок кода построчно.
Переменная newbase содержит основание целевой системы счисления (той, в которую мы переводим число, заданное в ответ на запрос программы «Provide a number to be analysed» — «Укажите число для анализа»). Цикл for newbase:=2 to 9 do begin . end; позволяет последовательно провести перевод значения переменной x сначала в двоичную, потом в троичную и так далее вплоть до 9-ричной системы счисления.
Напомним, что значение x мы задали в ответ на запрос «Provide a number to be analysed».
Цикл while (opnum div newbase) > 0 do begin . end; использует две дополнительные переменные: opnum и i . Видно, что i является индексом для обращения к содержимому массива left[] и инкрементируется (то есть увеличивается на единицу) при каждом очередном шаге цикла while .
Не забывайте, что в языке Паскаль , в отличие, например, от языка Си , индексы массива могут иметь значения начиная с единицы, а не с нуля. Именно поэтому запись начального значения переменной i осуществляется следующим образом: i:=1 .
Но зачем нам нужен массив left[]? И почему он называется именно так, а не иначе? Этот массив применяется для промежуточного хранения разрядов числа в целевой системе счисления ( newbase ). Каждый очередной разряд данного числа, добавляемый в массив left[] , оказывается левее предыдущего (в позиционной системе счисления каждый разряд имеет свой вес).
Давайте теперь обратим внимание на выражение opnum div newbase . Его результат должен быть больше нуля, иначе цикл while (opnum div newbase) > 0 do begin . end; перестанет выполнятся и содержимое массива left[] примет законченный вид.
Как видно, оператор div принимает два операнда: opnum (анализируемое число) и newbase (целевая система счисления). Предложение языка Паскаль opnum div newbase преобразуется компилятором GNU Pascal (или любым другим) и становится частью исполняемого объектного файла a.out (имя по-умолчанию), который пригоден для загрузки в память компьютера и непосредственного выполнения центральным процессорным устройством. Результатом выполнения предложения opnum div newbase является целая часть от деления значения переменной opnum на значение переменной newbase (к примеру, если 11 разделить на 4, то целой частью от деления будет число 2).
Перейдём к предложению opnum mod newbase . Для чего оно? Оператор mod применяется с целью нахождения остатка от деления двух чисел (например 25 mod 7 = 4). Но зачем это нужно? Затем, что он (остаток) всегда будет меньше основания целевой системы счисления, а следовательно, исходя из логики всей программы, будет записан в массив left[] , являясь значением одного из разрядов числа в целевой системе счисления. Иными словами: left[i]:=opnum mod newbase .
Теперь становится понятным, что предлагаемая программа на языке Паскаль автоматизирует использование метода деления «уголком» (поэтапного деления на основание системы счисления): анализируемое число делится на основание целевой системы счисления до тех пор, пока остаток от деления не будет меньше единицы.
Неудобный для применения человеком (слишком медленный) метод деления «уголком» находит вторую жизнь, добравшись до вычислительных мощностей современных электронных устройств. Всё дело в том, что пользователю гораздо проще запрограммировать процесс деления «уголком», чем быстрый (в исполнении человека) метод, применяющий «принцип единичности разложения на слагаемые», о котором говорилось выше. Когда программа, работающая «уголком» готова, то компьютер может её выполнить почти моментально.
Предложение for j:=i downto 1 do write(left[j]); выводит на печать (то есть на стандартное устройство вывода) содержимое массива left[] .
Сессия работы с программой, разобранной выше, может быть следующей.
Есть ли у рассмотренной программы недостатки? Разумеется! В текущей редакции она не способна работать с большими числами. Впрочем, учебный пример и не должен быть слишком «идеальным», иначе будет скучно. Исправить указанный недостаток очень легко (достаточно внести изменения в исходный код: увеличить размер одного из используемых массивов). Читатель может сделать это самостоятельно и тогда программа начнёт работать и с теми числами, действия с которыми человеку затруднительно проводить устно (да и с карандашом в руке — тоже). Например:
Но мы ведь совсем забыли разобраться с логикой работы программы в случае, если пользователь решил анализировать число, записанное в системе счисления, отличающейся от десятичной! Для такого положения вещей применяется блок кода, цитируемый ниже.
Стандартная функция length(k) возвращает длину строки (количество разрядов в анализируемом числе), которая содержит анализируемое число. Цикл for l:=length(k) downto 1 do begin . end; выполняется до тех пор, пока переменная l не станет равной единице.
Внутри цикла выполняется блок кода, ключевой строкой которого является j:=j+z*(y pow (l-1)); . В ней производится возведение исходного основания системы счисления, хранящегося в переменной y в степень, которая на единицу меньше количества разрядов в анализируемом числе (это нужно, чтобы было возможным работать с разрядом, значение которого равно основанию исходной системы счисления в нулевой степени).
Ключевая строка, представленная выше, позволяет программно переводить число из исходной системы счисления в десятичную, то есть делать то же самое, что мы делали с числом 4435: 4435 = 4*5 2 + 4*5 1 + 3*5 0 .
Вот теперь действительно всё. Надеемся, нам удалось показать читателю то, каким образом можно обрабатывать числа, хранящиеся в ячейках памяти.