Хей, аноны, сегодня 12:30 субботы, время очередной пасты про айти. Сегодня мы изучим разные системы исчисления, пройдемся по некоторым фишкам и изучим несколько операций с двоичными числами. Это вообщет не столько программирование сколько математика, но э

предыдущая часть

Есть такая теория, что азы математики постигаются любой цивилизацией на определенном этапе развития. Но эт очень неоднозначный вопрос. Впервые позиционные системы счисления придумали вроде как в Вавилоне, а потом их активно зафорсили в Индии и поехало. Не будь такой системы исчисления мир бы был просто совершенно иным. Позиционные системы исчисления — это когда в числе значение каждой цифры зависит не только от того как она выглядит, но и от того где она находится. Например, в числе 156 единица фактически означает сотню, пятерка-50, ну а шестерка она шестерка и есть. Основание системы — это грубо говоря то, на что умножается цифра в зависимости от позиционки. Посмотрим опять таки на примере 156. Шесть имеет нулевую позицию и поэтому умножается на 10 в нулевой степени. 10 в нулевой степени это один. 6*1=6. Пять умножается на 10 в первой степени, 10 в первой степени это 10. 5*1=50. Единица умножается на 10 во второй степени. 10 во второй степени это 100. 1*100=100. Потом мы собственно все это складываем — 100+50+6=156. О чудо! Десятичная система исчисления.
В старые времена математика в основном была занятием для элит и поэтому была немного уебищной и неприспособленной под быдло. Если ты посмотришь на количество месяцев в году, количество секунд в одном часу и количество часов в сутках то ты явно увидишь там налет тех самых недесятичных систем. Самый цимес в том что десятичная система не является и никогда не являлась самой удобной. Наши дальние элитарные предки вполне себе нормально считали все в других системах, да и инопланетяне скорее всего юзают какую-нибудь 16-ричную системку более точно заточенную под компы. Десятичная система это просто как бы привычка, что-то вроде ковыряния в носу, которое одновременно приняло все человечество. Считай ты с детства все в двоичной системе ты бы мог легко прийти в магазин и сказать «мне 100111 скрепок пожалуйста» а тебе бы ответствовали «хорошо, с вас 1001 рубль». Почему же тогда десятичная система Потому что старую математику переточили под быдло. Пальцев у человека 10. Считать по ним просто и понятно.
Ну и тип вопрос дня — а как перевести двоичное число в десятичное Мы же помним, что вся инфа в компе записана в виде единиц и нулей в ячейках оперативы по 1 бит каждая. На самом деле, механизм здесь абсолютно такой же как и в примере с 156, только умножаем мы на двойку в степени позиции числа, а не на 10. Приведу пример. У нас есть число 10110. Начинаем с нуля. Умножаем его на два в нулевой степени. Получаем 0. Умножаем единицу на два в первой степени.Получаем 2. Умножаем следующую единицу на два во второй степени. Получаем 4. Умножаем ноль на два в третьей степени. Получаем 8*0=0. Умножаем единицу на два в четвертной степени. Получаем 16. Складываем все что у нас наумножалось 0+2+4+0+16=22.
А как перевести десятичное число в двоичное Все таки это происходит каждый раз когда ты вбиваешь какое то число в оперативу. Довольно просто анон. Просто берешь и делишь число на двойку пока оно не превратится в ноль. Если число делится на двойку, в конец нового числа пишешь ноль. Если не делится — один. Приведу пример. Возьмем число 22. Поделим его на два. Получим 11, запишем 0 в конец нового числа.0. Поделим 11 на 2. Получим 5 и один в остатке, запишем один перед нулем. 10. Поделим 5 на 2. Получим 2 и один в остатке, запишем его перед единицей. 110. Поделим два на два, получим 1 без остатка, запишем ноль перед единицей. 0110. Поделим единицу на два, получим ноль и один в остатке, запишем его перед нулем. 10110. Как мы видим, это то самое число из примера выше, а значит все верно. Магия!
Помните я вам говорил что в компах все построено на двоичной системе Я вас немного наебал. На самом деле в компах куда чаще юзается 16 ричная система исчисления. Она позволяет поразбивать двоичные числа из четырех цифр на так называемые тетрады(потому что количество всех комбинаций которое можно намутить из четырех единиц и нулей, равняется 16), каждая и которых соответствует одной цифре 16 ричной системы. А так как в оперативе классическое место под память занимает 8 ячеек(байт), то эт очень удобно, задавать всякие адреса двумя цифрами. Как переводить числа из 16 ричной системы в десятичную Да так же, собственно. Только вместо двойки в некой степени мы юзаем 16. И еще, в 16 ричной системе 16 цифр, но так как цифр арабских всего 10, для того чтобы записать числа после 9 юзаются буквы английского алфавита. A=10, B=11, C=12, D=13 ну и т.д. Вот у нас например есть число 1B. B=11, умножаем ее на 16 в нулевой степени. Получаем 11. 1 умножаем на 16 в первом степени. Получаем 16. Складываем 16+11=27. 1B=27.
Собсна, всю эту красоту учили еще до появления первых компов. И что самое интересное, логические операции на которых построены все компы тоже существовали еще до первых компов в криптографии и матлогике. Что такое логические операции Это некие штуки которые чет делают с единицами(истиной) и нулями(ложью). Операторы бываю одинарные, когда требуется только одна единица или ноль, и более крупные. Одинарные это неинтересно. Там есть разве что отрицание(это когда 1 превращается в ноль, а ноль в один). А вот с крупными все весело. Есть операция И(and). На выходе получится истина, только если оба утверждения истинны. Например 1 и 1 дадут 1, а 1 и 0 — 0. Евгений трахнет тянку если сбреет усы и найдет работу. Евгений сбрил усы, но работу не нашел, значит тянку он не трахнет. Далее следует операция ИЛИ(or). Или делает утверждение истинным если хотя бы одна его часть истинна. То есть 1 и 0 дадут 1, 1 и 1 дадут 1, 0 и 1 дадут 1. Ноль даст только два нуля. Петра возьмут на работу если он хороший менеджер ИЛИ его дядя генеральный директор. Петр не очень-то хороший менеджер, но с дядей ему повезло. Значит, его возьмут на работу. Далее следует операция XOR. Она превращает в ноль совпадающие числа. То есть 1 и 1 дадут 0, ноль и ноль дадут ноль. XOR активно юзался во всяких шифровальных машинах, в асме же его юзают чтобы почистить регистры. Например xor ax,ax обратит значение регистра ax в ноль, ведь оно будет совпадать само с собой. Пример xor — человек может быть женщиной xor мужчиной. Катя — и женщина, и мужчина одновременно. Это ложь, и Катя отправляется в паблик КНН придумывать себе гендер.
Собственно, на логических операциях и построено все программирование. Мы просто говорим что делать тогда, тогда и тогда. Это поразительно, но всего три оператора позволяют создавать просто грандиозные вещи. Но вернемся с небес к ассемблеру. Помните, я говорил что вывести десятичное число на экран нельзя Вот потому-то и нельзя, что хранится оно там в 16-ричном виде. То есть способы то конечно есть, но для этого нужно играться со смещениями и переводами, а нам это нахрен не нужно ибо мы не программисты, а постигающее мир айти нубье. Помните, в первых примерах я использовал команду int 21h Это так называемое прерывание, команда которая заставляет процессор перестать крутиться в обычном режиме, обработать причину прерывания и вернуться к работе. А h тут просто обозначает, что число это введено в 16-ричной системе. Можно даже перевести его в десятичную- 1+2*16=33. А помните команду int 4ch 4с — тоже номер замыкания в 16 ричной системе.
А в следующей пасте мы еще побегаем по особенностям асма, фишечкам и забавным историям и начнем плааавно перекатываться в другой язык проги. Спасибо за внимание, оставайтесь на связи, читайте нас в субботу. #паста #луркопаб #lm #Лурк_it

Вам может также понравиться...

Добавить комментарий