Представление числа в двоичной системе счисления

Представление числа в двоичной системе счисления

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

Задано неотрицательное целое число в двоичной системе счисления. Требуется перевести его в десятичную.Задано неотрицательное целое число в двоичной системе счисления. Требуется перевести его в.

Проверить правильность ввода числа в двоичной системеДано число в двоичной системе счисления. Проверить правильность ввода этого числа (в его записи.

ну, некоторые моменты по поводу систем счисления скажу я, т.к. влом ссылки искать:

1) система счисления может иметь любое целое положительное основание, отличное от единицы (в смысле двоичная, десятичная и т.д.)

2) количество систем счислений безгранично (т.к. я могу придумать и троичную, и десяти_тысячно_пятдесят_шестиричную)

3) наиболее удобны те системы счисления, чьё основание кратно степени двойки (восьмиричная, шестнадцатиричная, т.к. они очень просто переводятся в двоичную и обратно)

к примеру перевод числа из 16ой СС в 2ую: каждому числу в 16ой СС соответсвует 4 в двоичной. дальше рисуются соответсвия вида:

И перевод становится элементарным: к примеру отобразить в довичной СС число F3 F=1111 3=0011 итого F3==11110011

Не совсем понятна природа Вашего вопроса, да и его суть. Надеюсь всё же среди написанного найдётся что-то "в тему".

Общий принцип систем исчисления состоит в том, что когда в одном разряде исчерпаны все символы для обозначения количества (для 16-ричной это 0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F, для двоичной 0-1), то этот разряд сбрасывается (обычно в ноль) на начальное значение, а следующий разряд получает приращение на один шаг.

Те кто программирует постоянно, особенно те, кто на ассемблере что-то вояет свободно переводят подобные числа в hex или binary просто в голове, так же как обычные люди обращаются с цифрами в десятичной системе. Важно понимать, что десятичная система ничем не примечательна относительно других, тем паче мне странно наблюдать когда люди стремяться к "круглым" цифрам. Круглые они в одной системе, но не круглые в другой, а количество обозначают одно и тоже. Так что это чисто психологический момент. В большинстве случаев программисту нет нужды переводить числа из одной системы в другую - это, как правило, уже реализовано. Изначально аппаратная природа компьютера приспособлена для операций с двоичными числами - это происходит от электрического уровня организации компьютера и процессора, в частности, которые общаются с помощью сигналов с двумя устойчивыми состояниями (высокий и низкий уровень). На логическом уровне это выливается в единицу (1) и ноль (0). Таким образом, с какими бы числами не работал компьютер, он, на самом деле, всегда работает с двоичными числами. А ежели так, то логично было бы просто взять у него число прямо в таком представлении, раз уж нам надо. Почти во всех языках программирования такая возможность есть. Обычно там уже есть аппарат для свободной работы с двоичными, десятичными, шестнадцатиричными числами. Шестнадцатиричная система существенно компактнее двоичной в плане записи и видимо по этой причине и вошла в применение (возможно исторически было немного не так). Обращение программиста к двоичной системе часто связано с необходимостью создания какого либо алгоритма. Например, умножение или деление кратное 2 более экономно реализовать сдвигом битов на один или несколько позиций - при сдвиге на одну позицию значение числа будет изменяться в 2 раза. Подобные сдвиги реализованы на уровне команд процессора и их выполнение очень экономично в сравнении с отработкой обычного алгоритма умножения или деления. Это лишь один из примеров, наиболее понятный по сути. Часто работа с двоичными числами связана с необходимостью логических операций, с помощью так называемой булевой алгебры, логика которой завязана на два состояния - TRUE (1) и FALSE (0).

Перевод числа из двоичной системы можно реализовать различными методами. Будем считать, что число 94 хочет перевести в двоичную форму человек без всяких приспособлений. Каждый следующий разряд двоичной системы имеет "вес" в два раза отличающийся от соседнего (у 10-тичной системы отличие в 10 раз): bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 128_64_32__16__8__4___2___1 Смотрим какое ближайшее к 94 значение - это 64. Выставляем bit6=1. Вычитаем 94-64=30. Проделываем с 30 тоже самое, что и с 94 - ищем ближайшее значение. И так далее. На самом деле когда осталось 30 это число чисто умозрительно легко набрать из значений 16+8+4+2, фактически не производя никаких вычислений, просто подбирая последовательно значения. Все биты, участвующие в "наборе" числа 94 выставляем в 1, остальные 0. Получается 01011110.

Yurek, нормально объяснил Хотя в следующий раз лучше стену текста абзацами с красной строкой побольше разбавляйте

Spectral-Owl, скажу вам по скеркету, что основанием системы счисления может быть любое действительное число, а не только 2 3 и десяти_тысячно_пятдесят_шестиричная. Например, как вам СС с основанием пи, или е? Вообще из курса теории информации оказывается, что оптимальное основание системы счисление равно е. Оптимальная по таким параметрам - с одной стороны требуется минимальный алфавит, с другой стороны - длина сообщения должна быть тоже наименьшей. Минимумом это функции от двух параметров является решение уравнения lnP = 1, откуда P=e Подробнее: вики http://ru.wikipedia.org/wiki/%. 0.B8.D1.8F И тут покороче: http://xax.al.ru/aout/c1.htm

1. Существует ли оптимальное основание системы счисления?

Посмотрим на график функции, изображенный на рисунке 1. http://xax.al.ru/aout/b4.files/image001.gif

Нетрудно показать [8], что максимум достигается в точке х = е, где е – трансцендентное число, которое приближенно равно 2.71828… ( ©Эйлер ).

Поскольку е уже является основанием натурального логарифма, то основанием системы счисления для целых чисел быть не может. Вот такая логика.

Здесь мы запускаем второй закон природы, закон развития – струя дырочку найдет.

Воспользуемся услугами смешанной системы счисления, то есть системы счисления с несколькими основаниями.

Запишем число в виде поличлена

x = x0·q0 + x1·q1 + … + xn·qn . (2.1)

Взглянем формально на это выражение.

Здесь xi можно интерпретировать в качестве признаков, свойств, координат числа х.

Символы qi совсем не обязательно должны обозначать степенную функцию, просто в этом случае разложение (2.1) единственно, но такой мелочью можно пренебречь.

Вспомним формулы (1.3) – (1.5).

Выделим основное свойство системы счисления с постоянным основанием. Для этого добавим в (2.1) один разряд. Получим, что общее количество символов hq увеличилось на q символов, тогда как, общее количество чисел Nq возросло в q раз. Таким образом, имеем взаимно однозначное отображение

где i любое натуральное число, в нашем случае.

В смешанной системе счисления, добавление одного члена в формулу (2.1), очевидно, приведет к неравномерному увеличению hq , но отображение (2.2) должно оставаться взаимно однозначным.

Далее, поскольку число е лежит между 2 и 3, то основания смешанной системы счисления попытаемся найти в виде линейной смеси двоек и троек. Для этого, перепишем соотношение (2.2) в следующем виде

2·a + 3·b ↔ 2a·3b , (2.3)

где a и b пока не определенные целые индексы.

Подгоним a и b так, чтобы сохранялось условие взаимной обратимости отображения (2.3). В итоге получим результат в виде следующего правила – индекс b пробегает всю область натуральных чисел, а индекс a только 0,1,2.

Посмотрим, что получилось.

Изменяя индексы a и b , таким нехитрым способом, мы можем добиться того, что hab изменяется равномерно на единицу, как будто мы используем систему счисления с основанием равным единице. Далее, Nab изменяется уж очень знакомо, получается так, что ряд, образованный троичной системой счисления ( 3b , 2·3b ) разбавлен числами 4·3b, но в следующей последовательности

( 3b , 4·3b , 2·3b ) , (2.4)

или как показано на рисунке 2.

Здесь, в синих кружках, показаны вставки в троичную систему счисления.

Получилось! Это то, что нам надо. Теперь на координатные точки (2.4), как на скелет, можно натягивать натуральные, целые и даже рациональные числа.

Прежде всего, введем новые обозначения.

Заменим hq на L и дадим ему термин символьный логарифм.

Заменим Nq на E и дадим ему термин символьная экспонента.

Прямое отображение (2.3) обозначим функцией

С помощью таблицы 1 сформулируем правила вычисления этих функций.

Для функции e( ) правило - остаток от деления L на 3 дает 2·a, а целое есть 3·b, тогда E = 2a · 3b.

Для функции l( ) правило - делим E нацело b раз, остальное будет 2a, тогда L = 2·a + 3·b.

В конечном итоге, доопределим эти функции в начале числовой оси, и оформим таблицу, расширив диапазон на область целых чисел – рисунок 3.

Справа, на графике, показаны значения функции E = e(L).

Довольно долго не попадалось мне на глаза что-либо похожее, ни в Интернете, ни в научной литературе, но потом нашел. Оказывается, данная тема интересует структурных лингвистов. В статье [9] приводится строгое доказательство оптимальности данной функции для эффективного разбиения множества объектов любой природы по именным признакам. Нам будет достаточно утверждения того, что e( ) является не только оптимальной, но и единственной из всех возможных функциональных отображений вида (2.3), и определенной на всем множестве целых чисел.

📎📎📎📎📎📎📎📎📎📎