2x2=10, При каких условиях это возможно

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (7) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
BOOrunduk
11.06.2014 - 19:37
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
210
Так получилось, что я лежу в больнице. В чужом городе. Скукотиииища! Связи – нет, так что если этот опус опубликован – значит, я уже вернулся домой. Хочется что-то написать для души. Но что? Вертолётные темы не пошли – второй пост не вышел из инкубатора, так что с ними завязываем. Другие подобные темы – у меня фоток разобранных не было заготовлено, да и уже сомневаюсь, пойдут ли. Добыть фотик и поиграть в блоггера, фоткая больницу? А смысл? О чём же порассуждать? Так получилось, что я не так давно разъяснял устно сыну школьнику про системы счисления. Самое удивительное – у меня получилось, он понял. Давайте попробую изложить то же самое, но письменно. Да, мне нечего делать, я же в больнице. Ожидается 17 весьма условных картинок. Не ломайте! О конце сообщу. А начнём мы с анекдота:

2x2=10
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
BOOrunduk
11.06.2014 - 19:38
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Счёт по нарастающей
Чему нас учат в первом классе? Что есть единицы, десятки, сотни. Досчитали до конца единиц – переходим к десяткам. Перебрали десятки – переходим к сотням. Дальше – уже тема второго класса, так что остановимся пока на этом. Откуда взялись вообще десятки? Есть мнение, что всё связано с тем, что у нас на руках 10 пальцев. Ну, а дальше – по нарастающей. И почему-то учителя забывают сказать, что вся эта неоднородность – выдумана. Вроде, она помогает освоить счёт в целом, но в нашем случае – только путает. Давайте перейдём от неоднородных понятий к однородным. Сначала напишем с детства нам знакомую таблицу

0 1 2 3 4 5 6 7 8 9

И договоримся, что мы перебираем числа в том порядке, в каком они в таблице идут. Сначала 0, потом 1, потом 2… Ну и так до 9. А что дальше? А введём-ка мы понятие разряда. Эти разряды будут идти справа налево (так повелось, ничего не попишешь).

Число 5 – одноразрядное. Его описывать не интересно. То же скажем и о двухразрядном числе 83.

Число 987 – трёхразрядное, вот о нём уже поговорим. Младший разряд равен 7, следующий равен 8, следующий – 9. В чём-то немцы правы, когда читают числа справа налево. Может, их язык древние программисты создавали?


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:38
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
И тогда мы просто введём правило увеличения для разряда

2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:39
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Всегда начинаем с младшего (правого) разряда.

Вот у нас число 987. Мы запустили процесс его увеличения. В младшем разряде у нас цифра 7. Следующая в таблице – 8. Получаем 988.

Ещё разок. Младший разряд равен 8. Следующая в таблице – 9. Получаем 989.

И ещё разок. Младший разряд равен 9. Хм. Конец таблицы. Хорошо, меняем на 0 и переходим к следующему разряду. Он равен 8. Следующая цифра в таблице – 9. Получаем 990.

Работает! Мы больше не привязаны к разнородным понятиям «единицы», «десятки», «сотни», «тысячи» и тому подобное. У нас есть текущий разряд и следующий разряд. Мы всегда начинаем работу с крайне правого, а дальше – как повезёт. Для числа 19999999 фраза «меняем на первый элемент таблицы, то есть, на 0 и увеличиваем следующий разряд» будет повторяться многократно. Но рано или поздно мы упрёмся в: «Текущий разряд равен 1, берём следующее число из таблицы – 2, получаем 20000000».

Согласитесь, что при устном увеличении мы примерно так же делаем, просто не проговариваем эти операции, так как довели их до автоматизма в младших классах. Но округляя цену 4999,99, видя её на рекламе, мы невольно бежим глазами справа налево, чтобы понять, где остановиться, особенно если цена, скажем, 24999,99.

А, чуть не забыл. Если в разряде ничего нет, то считаем, что там 0, то есть, 99, 099, 000099 – одно и то же, ведь так?

Переместимся теперь с планеты Земля на мультяшную планету Плюк. Мультяшные пацаки и чатлане – четырёхпалые, это бросается в глаза, когда они из-за спичек в пепелаце торгуются (говорят «Шесть» и выбрасывают одну полную ладонь и два пальца на другой руке). Видео того эпизода вставлять не буду, я не хочу сразу после больницы в тюрьму попасть. Но найду что-нибудь в Гугле из уже валяющихся в сети картинок.


2x2=10
 
[^]
perfumery
11.06.2014 - 19:40 [ показать ]
-38
BOOrunduk
11.06.2014 - 19:40
3
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Получается, что у них наверняка исторически сложилась не десятичная, а восьмеричная система. Каковы будут правила счёта по нарастанию для неё? Да точно такие же, но базовая таблица перебора будет выглядеть так:

0 1 2 3 4 5 6 7

А дальше – всё то же формальное правило «если в разряде конец таблицы – заменяем на первое число, то есть, 0, и увеличиваем следующий разряд, иначе – заменяем на следующее число из таблицы». Давайте я не буду проговаривать действия, а просто напишу несколько последовательностей.

…23 24 25 26 27 30 31 32…

…75 76 77 100 101 102…

…766 767 770 771 772 773 774 775 776 777 1000 1001 1002…

Заглянем в место, где раки зимуют (фото нашёл в Гугле перед публикацией)


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:42
4
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Есть мнение, что у них таблица будет вообще такой:

0 1 2 3

А в остальном – ну всё то же самое. Посчитаем по-рачьи?

0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 100 101…

Я не знаю, почему у компьютера всего 2 пальца (в рамках этого поста, разумеется, не знаю), но система счисления у него двоичная. И таблица выглядит так:

0 1

Только для компьютера характерна определённая разрядная сетка. То есть, число разрядов у него постоянное. Помните, я говорил, что 99, 099 и 00099 – одно и то же? У компьютера 101, 00101 и 0000101 – это одно и то же, но принято писать столько нулей слева, сколько надо для того, чтобы число влезало в выбранное число разрядов. Пусть у нас старая добрая 8-битная запись. Тогда пишем 00000101. А если четырёхбитная – пишем 0101. Это не обязательно, просто так принято. Лучше сразу привыкать.

И с учётом этого, давайте поувеличиваем числа для 4-разрядной сетки. Для простоты понимания, двоичный счёт принято писать в столбик. Так нагляднее.

0000
0001
0010
0011
0100
0101
0110
0111

Ура! Мы умеем считать в двоичной системе!

Кстати, никто не сказал, что система счисления может только понижаться относительно нашей десятичной. Вполне может быть и повышение. Надо только выбрать какие-то знаки для недостающих цифр. Можно было бы ввести вообще любые закорючки, но чтобы чувствовать последовательность (быстро понимать, что больше, а что – меньше, не тратя время на обучение), принято использовать латинские буквы. Поэтому таблица для счёта в шестнадцатеричной системе будет такой:

0 1 2 3 4 5 6 7 8 9 A B C D E F

Всё остальное же остаётся таким же

Посчитаем?

…15 16 17 18 19 1A 1B 1C 1D 1E 1F 20

99 9A 9B 9C 9D 9E 9F A0 A1…

.. F8 F9 FA FB FC FD FE FF 100 101 102 103…

Непривычно? Я сам долго путался, считая, что девятка – это конец. Вопрос опыта. Главное – наше правило нарастания работает, знай себе таблицы в него подставляй.

Арифметика

Теперь рассмотрим сложение. Опять же, добрые учителя научили нас складывать в столбик. Даже про «8 пишем 1 в уме» рассказали. Соответственно, просто чуть-чуть видоизменим эти знания, чтобы научиться складывать любые числа в любых системах счисления. Во-первых, «в уме» на самом деле называется перенос. И таблица сложения должна выглядеть чуть иначе, чем мы привыкли (интересно, вбил бы я её, не будь у меня столько свободного времени?):


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:42
2
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Как всегда, при сложении мы берём пересечение строки, соответствующей первому слагаемому и столбца, соответствующего второму слагаемому. Но то, что раньше в сумме называлось «десятки» будет называться «перенос» (как раз то, что держим в уме). Он показан в скобках. 7 + 8 = 5 и 1 перенос.

Чуть-чуть помучаю сложными вещами. Коли есть перенос, то его надо и учитывать. Учителя в школе научили нас складывать несколько чисел сразу, но они на это год потратили. Не будем же мы тратить по году на каждую систему счисления, правда? Просто будем иметь в виду, что нам надо не таблицу, а куб сложения. Третий параметр – как раз входящий перенос. На картинке я это покажу так


2x2=10
 
[^]
Alexxx03
11.06.2014 - 19:43
45
Статус: Offline


Шутник

Регистрация: 1.05.14
Сообщений: 90
ТС, ты в какой больнице? Может апельсинчиков, памперсов?
 
[^]
MINSKAS
11.06.2014 - 19:43 [ показать ]
-22
BOOrunduk
11.06.2014 - 19:43
3
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Короче, всё то, что мы и раньше знали, просто раньше «в уме» могло быть, а могло и не быть. Теперь мы говорим, что «в уме» есть всегда, просто там может быть ноль. К слову сказать, тут часто бывают ностальгии посты, все дружно вспоминают приставку Dendy, так вот, у её процессора 6502 (как и 65C02) нет команды простого сложения, только сложение с учётом переноса. И этот перенос надо заранее заполнить или нулём или единицей. Вот всем примерам пример, где подавай входящий перенос и всё тут…

Ну, таблица сложения для переноса 0 уже была. Не поленюсь, сделаю такую же на случай, если входящий перенос равен 1.


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:43
2
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
В прошлом вычислении в столбик, у нас как раз надо было сложить 8 и 5 при входящем переносе 1. Чудненько, это как раз таблица для входящего переноса, равного 1. Ищем, получаем 4 и перенос в следующий разряд , равный 1.

2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:44
1
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Всё. Теперь мы знаем, что для сложения чисел, надо заранее заготовить набор таблиц сложения (лучше куб, но как мы его увидим?). А затем – складывать разряды, учитывая входящий перенос. Для младшего разряда входящий перенос всегда равен 0.

Таблицы создаются просто: В первой строке начинаем с нуля и дальше идёт нарастание значения по уже изученному правилу. Все остальные строки – это предыдущя, сдвинутая на 1 позицию (ну, и дорисовываем ей конец). Отмотайте назад, приглядитесь к той, у которой входящий перенос был нулевой…

Я не хочу, чтобы вы сейчас зевнули и закрыли мои рассуждалки, поэтому не буду приводить здесь таблицы сложения для восьмеричной и четверичной систем (хотя именно в четверичной 2+2=10, точнее, 0 и перенос 1). Эти таблицы тупо всё перегрузят. Сразу перейдём к таблице сложения двоичных чисел. Она крайне проста.


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:45
1
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Всё. Теперь с помощью этой таблицы, можно складывать двоичные числа. Собственно, существуют элементы, называемые «полный сумматор» которые тем или иным образом, реализуют именно эту логику. Сколько разрядов – столько полных сумматоров ставят в схему друг за другом, подавая выходной перенос предыдущего на входной перенос последующего (мы же уже выяснили, что работа ведётся поразрядно, то есть один сумматор на один разряд). Получается, что даже техника считает по точно такому же правилу, какое мы сейчас рассматриваем. Господа гусары! Ни слова про ускоренный перенос, это не о том пост!

Итак. Мы выяснили, что правила сложения для любой системы счисления едины, знай только таблицы подставляй, остальное – дело привычки (когда-то я мог в уме считать в восьмеричной системе).

Что касается вычитания – я не буду его расписывать. В принципе, там всё то же самое. Берём правила вычисления в столбик (только там будет не перенос, а заём), строим таблицы, начинаем ими пользоваться. Но если существует двоичный сумматор, то двоичный вычитатель, может, и существует, но широкого распространения он не получил. Я уже говорил, что у компьютеров разрядная сетка ограничена. Благодаря этому, вычитаемое можно легко и просто перевести в дополнительный код (что это такое – тема на отдельный пост) и затем выполнить операцию сложения. Но ассемблерная команда вычитания у любого процессора, разумеется, присутствует (Господа гусары! АЛУ – тема, достойная нескольких отдельных постов, так что о них – тоже ни слова!).

Умножение и деление – тоже оставим за рамками поста. Нам надо показать, что работа в любой системе счисления – это не просто, а очень просто, а операции сии сложны даже в десятичной системе (сколько месяцев школьники занимаются тем, что только умножают или делят в столбик, совершенствуя навык?).

Перевод из системы в систему

Теперь, когда мы уже умеем считать в разных системах счисления, поговорим про перевод из одной системы в другую. Существует универсальное правило, нам о нём рассказывали на первом курсе университета… Только оно настолько сложное, что ко второму курсу его уже никто не помнил. Собственно, я и не запоминал, так как в восьмеричную систему мог перевести на уровне устного счёта, а в остальные распространённые, двоичную и шестнадцатеричную, из восьмеричной перевести – пара пустяков (чуть ниже поясню почему). В общем, не буду я вас этим правилом грузить. Там надо не просто делить в столбик, а ещё и делить в разных системах счисления.

Давайте лучше рассмотрим, как перевести из любой системы в привычную нам десятичную и из десятичной в любую, а там уже – в два действия как-нибудь…

Ещё разок вспомним понятия «единицы», «сотни», «тысячи» и ещё раз дружно от них откажемся.


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:45
4
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Вот, что эти единицы, сотни, тысячи и прочие из себя представляют на самом деле. Получается, что мы можем разложить число 2014 следующим образом:

2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:46
2
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Вот, собственно, и всё. Если говорить умными словами, то каждый разряд числа даёт вес, равный основанию системы счисления, возведённый в степень номера этого разряда. Хотите – запоминайте, хотите – нет. А так - заменяем 10 на N, где N – основание системы счисления (записанное в десятичном виде, разумеется, но нам это как раз и привычней)… И у нас всё само переведётся в десятичную систему. Попробуем?

31 восьмеричное (то есть, N = 8) при переводе в десятичку получится:


2x2=10
 
[^]
Зверомыш
11.06.2014 - 19:46
0
Статус: Offline


Шутник

Регистрация: 12.03.14
Сообщений: 0
а можно с утра это все перечитать и попытаться? upset.gif
 
[^]
BOOrunduk
11.06.2014 - 19:46
5
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Восьмеричные числа обозначаются, как OCT, десятичные – DEC. Похоже, что шутка-то верна! 31(OCT) и вправду равен 25 (DEC)!

Рассмотрим более жизненный пример. Вот робот Абрадокс требует от нас три тысячи коробков спичек. С числом могу путаться, я мультик в кинотеатре более года назад смотрел, мог подзабыть, но вроде, столько. Итак. Давайте оценим, кто он такой. Нахал, каких мало, на запчасти разобрать его, правда? Но вспоминаем, что наиболее вероятно, он мыслит в восьмеричной системе. То есть, по-нашему, по-земному, по-десятичному, получается


2x2=10
 
[^]
Alexeykov
11.06.2014 - 19:47
2
Статус: Offline


Ярила

Регистрация: 12.05.12
Сообщений: 12136
Вообще-то 2х2=100 а не 10.
 
[^]
BOOrunduk
11.06.2014 - 19:47
3
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
1536 коробков. Нахал безусловно, но в целом, понять его можно, на запчасти разбирать не будем…

Теперь шестнадцатеричное число. Я выбрал с буквами в теле - 2EF, как оно выглядит при переводе в десятичку? Тут надо набросать табличку соответствия десятичных и шестнадцатеричных чисел (я не стеснялся и набрасывал её первые лет 5 работы с HEX числами, пока наизусть не выучил, выучить оказалось сложнее, чем научиться быстро наносить на бумагу)


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:48
4
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Сложно? Вроде, нет. Громоздко, но не сложно.

Теперь в обратную сторону. Чтобы переводить из десятичной системы в любую другую, надо вспомнить такую штуку, как деление с остатком. Этому то ли в первом то ли во втором классе учат, ещё до всяких там дробей. Ну, помните, 7/2=3 и 1 в остатке? 6/2 = 3 и 0 в остатке. Просто нулевой остаток ,нас приучили отбрасывать. А сейчас мы его отбрасывать не будем никогда. Ноль – тоже цифра. Тогда для перевода в любую систему из десятичной делаем так:

Пока текущее число не ноль – делаем
Поделили текущее число на N (где N – основание системы счисления)
Записали остаток в качестве текущего разряда (справа налево, ещё не забыли?)
Частное же будет новым текущим числом для следующего шага
Конец цикла

Возьмём наше многострадальное десятичное25 и переведём его в восьмеричную систему.
25/8=3 и остаток 1.
Записали: «1»
3/8=0 и остаток 3
Дописали. Получилось «3
Правило работает. 25(DEC) =31(OCT) Давайте переведём что-нибудь подлиннее

Десятичное 2014 переведём в восьмеричное
2014/8=251 и остаток 6. Пишем «6»
251/8=31 и остаток 3. Дописываем – «3
31/8=3 и остаток 7. Дописываем – «736»
3/8 = 0 и остаток 3. Дописываем – «3736»
Вот так. 2014 (DEC) = 3736 (OCT)

А его же в шестнадцатеричное?
2014/16=125 и остаток 14. Сверяемся по таблице, пишем E
125/16=7 и остаток 13. Сверяемся по таблице, дописываем: «D
7/16=0 и остаток 7. Дописываем: «7DE».
Получилось 7DE (HEX).

Кстати, для самоконтроля переводить можно и в калькуляторе Windows, если выбрать ему режим «Программист». Из виндушных мне семёрочный не нравится, больше нравился «научный» в старых Windows вплоть до XP, а от калькулятора из Dos Navigator я просто визжал, даже свой такой же написал. Но сейчас – эпоха WIN7, так что в общем случае, приходится пользоваться тем, что дают…


2x2=10
 
[^]
BOOrunduk
11.06.2014 - 19:48
3
Статус: Offline


Приколист

Регистрация: 8.05.14
Сообщений: 281
Ну, и на закуску – поясню, почему программисты так любят использовать восьмеричную (устаревшее) и шестнадцатеричную системы. Дело в том, что они имеют очень забавное свойство – у них полный перебор чисел совпадает с полным перебором определённого числа разрядов двоичного числа. Смотрите сами

0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Дальше в восьмеричной системе идёт 10, а в двоичной – 1000. Из этого правила вытекает примитивнейшее преобразование между двоичной и восьмеричной системами. Из двоичной в восьмеричную переводим так: Разбиваем двоичное число на триады, заменяем двоичное значение на восьмеричное из таблицы, которая идёт над этим абзацем.

Пусть у нас есть двоичное число 0010100110101010101010. Бьём на триады (как всегда, справа налево): 0.010.100.110.101.010.101.010 подставляем по таблице – получаем 02465252 (надеюсь, ничего не перепутал). Ещё и ещё раз повторяю, я первые годы перед каждым переводом рисовал таблицу на бумаге. Только через несколько лет всё улеглось в уме. Не надо гнуть пальцы! Все сложности – от нарушения технологии. Если технологию соблюдать – всё не просто, а очень просто!

Ну а обратный перевод – тоже замена чисел на триады. Скажем, многострадальное 31 (OCT) будет 011.001 (BIN). Точка –условная, чтобы было видно триады. Правильная запись – 011001. Или 11001 (я отбросил незначащий ноль слева), а может – 00011001 (добил нулями до восьми битов), ведь число нулей слева – по вкусу же.

Для шестнадцатеричных – то же самое, но там не триады, а тетрады. 0000, 0001, 0010, …, 1110, 1111. Табличку построите и сделаете пример самостоятельно. Хотя, кого я обманываю? Никто ничего не сделает! Но так принято писать в умных книжках.

А у меня – всё!
P.S. Не спрашивайте меня, что мне тут колют. Самому интересно.



2x2=10
 
[^]
REZt
11.06.2014 - 19:49
9
Статус: Offline


больше пруфов!

Регистрация: 24.11.12
Сообщений: 5711
как-то так:

2x2=10
 
[^]
TripodWalker
11.06.2014 - 19:50
33
Статус: Offline


как озеро я спокоен и тих...

Регистрация: 18.05.11
Сообщений: 1569
в больнице, говоришь?
попроси галоперидолу штоле deg.gif
 
[^]
zeroXXX
11.06.2014 - 19:51
35
Статус: Offline


Я Порошенко

Регистрация: 25.05.14
Сообщений: 803
тс ты душевно больной, на хрена нам все это, еще бы пятнашки на троичную систему разложил
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 39791
0 Пользователей:
Страницы: (7) [1] 2 3 ... Последняя » [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх