КАК РАБОТАЮТ ОТРИЦАТЕЛЬНЫЕ ЧИСЛА | ОСНОВЫ ПРОГРАММИРОВАНИЯ
Вставка
- Опубліковано 19 тра 2024
- Курс “Профессия Python-разработчик” и бесплатный доступ к первым 3 модулям от Skillbox - clck.ru/dzHQk
КАК РАБОТАЮТ ОТРИЦАТЕЛЬНЫЕ ЧИСЛА.
Любые данные в компьютере представляют собой двоичное число.
Это все знают, но не все знают, в каком формате компьютер их хранит.
Если целые положительные числа перевести в двоичный вид довольно просто, то с отрицательными числами у нас возникает много проблем, которые должны быть решены с помощью специальных форматов записи.
Подписывайся в соц. сетях:
Телеграм - t.me/Alek_OS
ВК - alekos1
Яндекс Дзен - zen.yandex.ru/id/62220edf240e...
❤️ Поддержка канала:
Патреон - / alekos1
Юмани - yoomoney.ru/to/410011179144828
✔️ Полезные ссылки:
Основы программирования - • КАК РАБОТАЕТ ПАМЯТЬ КО...
Полезно знать - • ЯЗЫКИ ПРОГРАММИРОВАНИЯ...
00:00 Введение
01:21 Реклама
03:12 Число и регистр
03:52 Беззнаковые типы
04:18 Прямой код
06:38 Обратный код
08:42 Дополнительный код
Телеграм - t.me/Alek_OS
ВК - vk.com/alekos1
Яндекс Дзен - zen.yandex.ru/id/62220edf240e7221b567946a
А какую музыку на фоне вы используете?
Очень качественный контент у тебя! Рад что ты продолжаешь выпускать ролики. Лайк не глядя, на рекламу плевать (кушать нужно всем). Не останавливайся, спасибо!
Сколько же сил и времени было вложено в этот контент.
Очень интересно смотреть, благодарю за информацию :)
Для меня самым интересным есть то, что я это все когда-то учил и, в принципе, знаю. Но сейчас это стало для меня немного понятнее и теперь мне лучше ясна эта тема. Спасибо
Как и где учил, если не секрет?
@@crzyduck1 самостоятельно) Даже писал код "Битовой строки" для складывания и вичитания положительных/отрицательных чисел в виде 0 и 1
@@IIIA_KO По книгам изучал? Просто я за кодинг шарю, а за какие-то такие каомпьютерные темы не особо. Было бы круто если бы смог мне посоветовать ресурсы какие-нибудь)
@@crzyduck1 CyberForum, Metanit, GeeksForGeeks к примеру
@@IIIA_KO о Метанит знаю, C# на нём учил. Спасибо за ресурсы!)
Я знал только про прямой код, но теперь понимаю, что всё устроено чуть сложнее и удобнее. Спасибо за интересное качественное видео!
Постоянно смотрю ваши видео, мне очень нравится подача. В этом видео стоило бы подробнее рассказать о том, почему дополнительный код работает с точки зрения математики, так как это позволит проецировать эти знания на более сложные задачи, например, написать программу для работы с большими числами и используйте для этого систему счисления с большим основанием. Начнем с того, что сама операция вычитания не является линейной, так как нам нужно брать единицы из старших разрядов, поэтому было бы не плохо использовать уже существующие сумматоры. Для этого мы воспользовались проблемой вычислительной техники, ограниченое количество разрядов для хранения числа.
"Если у вас есть пять разрядов, то перенос в шестой разряд, как и заём из него, благополучно теряется, что позволяет вместо вычитания числа выполнять прбавление некоторого другого числа. Напримет, если мы хотим вычесть из числа 500 (то есть, на пяти разрядах, 00500) число 134 (00134), то вместо этого можно прибавить число 99866. Если у нас был шестой разряд, то получилось бы 100366, но поскольку шестого разряда нет, резкльтат получится 00366, то есть ровно то, что нужно. Как легко догадаться, "магическое" число 99866 получено путём вычитания нашего вычитаемого из 1000; с точки зрения арифметики мы вместо операции X - Y выполняем X + (1000000- Y) - 1000000, причём последнее вычитание происходит само собой за счёт переноса в несуществующий шестой разряд.
Хитрость здесь в том, что получить из числа y 1000000 - Y оказывается неожидано просто. Перепишем выражение 1000000 - y в виде 99999 - Y + 1. По скольку число y по условиям задачи не более чем пятизначное, вычитание 99999 - Y в столбик произойдёт без единого займа, то есть попросту каждая цифра Y будет заменена на цифру, ДОПОЛНЯЮЩУЮ её до девятки (до 9 так как 9 это максимальная цифра в десетичной системе, для двоичного кода дополнением 1 является 0, для 0 - 1, вот и получается что нужно просто инвертировать биты). Останется только прибавить единичку, и дело сделано. В нашем примере цифры 00134 заменяются на соответстввующие им 99865 (для 0 дополнение до девятки - 9, для 1 - 8, для 2 - 7, для 3 - 6, ..., для 9 - 0), затем прибавляется единица и получается "магическое" 99866, которое мы прибавили к 500, вместо того чтобы вычитать 134." из книги азы программирования А.В.Столяров
Как хорошо что есть такие каналы! Автору огромное
Очень удачная и легко воспринимаемая интерпретация компьютерной обработки знаковых чисел. Это говорит о совершенстве понимания автором двоичной логики (далеко не каждому дано). Начинающим, конечно, сложно быстро перейти от привычной десятичной системы к двоичной, перестраивая логику своего мышления и Alek это прекрасно понимает. *Мой жирный лайк* за его желание поделиться своими знаниями, научить людей по-настоящему логически мыслить!
Почему показано всего 4 бита?
Как хорошо что есть такие каналы! Автору огромное спасибо за труд!
Ну наконец видео вышло =) Большое спасибо друг!
Наконец-то разобрался с этим! Ещё интересно было бы в конце разобрать умножение числа на -1, тоже вкусный момент
До меня наконец-то дошло, спасибо огромное!
В сумматорах дополнительный бит выносится как выход переноса (carry out). Соответственно, реализуют и вход переноса. Сумматор в итоге работает так Z = а + в + С. В процессорах выход переноса (он же является самым старшим дополнительным битом) подключают к биту регистра статуса процессора и реализуют две инструкции. Одна просто сложение, которая выводит перенос в регистр, если переполнение произошло. А вторая инструкция - сложение с учётом переноса. Она подаёт этот бит с регистра статуса на вход переноса сумматора. Таким образом производится сложение чисел, разрядность которых выше разрядности процессора.
Продемонстрировать это проще всего на ассемблере восьмибитного микроконтроллера AVR.
; A = 0x1020
; B = 0x3040
; Операнд А
LDI R16 0x20
LDI R17 0x10
; Операнд В
LDI R18 0x40
LDI R19 0x30
; Складываем младшие байты
ADD R16, R18
; Складываем старшие части с учётом переноса
ADC R17, R19
; Результат в регистрах R16 и R17
Понятно. Спасибо за интересные и полезные знания
сделай, пожалуйста 2 часть ассемблера, очень жду)
«В компьютерных науках есть только две сложные проблемы - аннулирование кэша, придумывание названий и ошибка на единицу» - Леон Бамбрик :)
Спасибо за очередной и очень полезный контент! Классно что рассказываешь какие были попытки реализации архитектуры для хранения отрицательных чисел, какие были изъяны и что придумали, чтобы их максимально минимизировать. Классно расширяет кругозор!
Поддерживаю тебя на патреоне, но в виду того, что со следующего месяца платежи с российский карт проходить не будут, какие есть еще способы поддержки? Будут ли работать карты виза на юмани?
Новое видео! Ура, продолжай в том же духе! Красава
КайФ)
Твой формат нужно в школы и в ВУЗЫ отдавать)
Спасибо за крутую графику
Очень качественно.
И понятно.
Спасибо огромное
Сделай видео как в процессоре реализованы арифметические операции типа умножения степени, корня
Интересная информация, спасибо за видео!
Классное видео! Жду не дождусь еще контента)
Очень крутые видео у тебя! Смотрю с удовольствием! Так держать!
Видимо в подборке книг будет "Цифровая схемотехника и архитектура компьютера"
Серьёзный труд, красавчик!
Существует также ещё одна система счисления, называемая нега-двоичная. Она также может работать с отрицательными числами. А так видео интересно и познавательно
Мой лайк был тысячным)). Очень полезные видео, продолжайте в том же духе)
Годнота подъехала, спасибо за ролик !)
Отлично! Спасибо! ❤
Привет, рад видеть новый выпуск.
Спасибо за познавательный контент
Благодарю за контент!! 👍🏻 классная визуализация, приятный голос, хорошая подача и темп!! Всё прекрасно!! 😊
Спасибо за труд !
Наконец-то нормально объяснили обратный код. Спасибо большое!
Спасибо вам за ваши видео :з
Ты реально крутой 👍👍👍 Спасибо за труды 👍👍👍
Вау, так просто объяснить мне ещё никто не смог, спасибо за контент
Отличное видео, а когдет будут другие видео по ассемблеру ?
Никто в интернете лучше не объясняет. Я перерыл все источники, но все равно не мог наглядно понять то, как именно увеличивается отрицательный диапазон на единицу (-128, а не -127). Просто огромный респект
Ну если коротко, то 127 в двоичной будет же просто 1111111, а 128 уже 10000000. Выходит если представлять в обратном -127 у нас переполнений вообще нет, а на -128 возникают переполнения во всех разрядах кроме 8 и 0. Поэтому и выходит, что -128 в доп коде выглядит, как 128 в обычном)
О каком диапозоне речь? У нас двоичная система счисления и есть алгоритм по которому можно получить обратный код...
Попробуй сам посчитать -128. Начни складывать 101111111+000000001. Даже уже по числу видно, что на каждом разряде 1+1 кроме 8 и 0 разряда))
Откуда взялось 101111111 не надо же объяснять? Я тут уже писал кому-то. Продублирую тогда.
Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица. Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
Если мучает вопрос почему -127 в доп коде это 10000001, а не 00000001, то тут всё просто: при преобразовании кода в обратный мы инвертируем все разряды числа КРОМЕ знакового.
Круг напомнил кольца вычетов, и правда такая система очень удобна для математики :)
Видосы по ассемблеру как часто выходить будут?
Не соглашусь по поводу одинаковости языков программирования. Они могут быть похожи в рамках парадигмы (императивные, ОО, функциональные). Языки из разных парадигм очень сильно отличаются подходом - буквально, о программе думать приходится совсем с другого ракурса. Иногда в язык вводят какую-нибудь особенность (например, в Rust работа с памятью), из за которой тоже приходится применять другие подходы в программировании. Справедливости ради стоит заметить, что многие языки программирования позволяют программировать в различных парадигмах.
Спасибо за ролик, знаю что с рекламой на ютубе сейчас плохо, так что отправил соточку на юмани, с миру по нитке так сказать :)
Спасибо!
Спасибо!
Очень качественный контент
Столкнулся с темой отрицательных чисел в java, там нет беззнакового байта, а данные были именно в этом формате. Пришлось писать преобразование.
Очень хорошо и наглядно объясняешь всё, спасибо за твою работу!
Привет дружище! Спасибо за ваши труды, с удовольствием смотрю твои ролики . 👍👍👍👍 Спасибо
Как же это элегантно.
крутые видео можно видео про веб ахитектуры про сокеты протоколы и тд
Любопытно. Недавно пересматривал видео, подумал, что не хочется их смотреть из-за интонации и общего контекста. Теперь же интонация изменилась, стало гораздо легче смотреть.
Что ты имеешь ввиду под общим контекстом?
Спасибо
парень ты гениально обьясняешь
В конце мелодия хороша. Можно послушать отдельно?
Великолепно!
*Всё доступно и понятно! БОЛЬОЕ СПАСИБО!*
Жаль в видео не было сказано о модифицированном коде и о коде со смещением. Не так важно, но даёт большее понимание данной темы, как мне кажется.
спасибо
спс за видео
Урра новый видос :3
12:00 Единственно я не понял, как решили вопрос с переполнением?
Привет! Ты будешь выпускать ролики про как работает сеть?
Привет!
В будущем да
@@AlekOS Буду очень рад посмотреть!!! Кстати, спасибо за такой контент!!
Но самое крутое в дополнительном коде то, что даже умножение в нем не требует никаких ухищрений для учета знака.
Алек! Давай про числа с плавающей точкой такой же видос! Этот IEEE 754 вообще тёмный лес. Растолкуй нам неучам...
Уже есть на канале
@@AlekOS туплю....всё, увидел, спасибо!
Контент топ
Посоветуйте книгу середнячку в computer since для общего кругозора
Таненбаум - Архитектура компьютера. Классика же
Следующая тема, как я понимаю, это борьба с переполнением?
Инфографика в виде часового механизма - гениально!
Благодарен вам за чистый концентрат информации + очень понятные объяснения. Вот это я понимаю, действительно качественный контент по информатике
класс! можно по сетям контент?
В планах есть
@@thetraveler7779 так вроде он резко против подобных курсов?
Можно поподробнее с tls1.3 пожалуйста
Бляяяя, я как будто новое анимэ для себя открыл и просмотрел все сезоны разом, а теперь меня ломает пока не выйдет новая серия
Ну у меня красноречия для дифирамбов не хватает. Как всегда на высоте.
Эх, реклама в видео противоположна мировоззрению описанном в предыдущем видосе (про кучу курсов о синтаксисе и прочее) (((
Алек Ос, здраствуйте. Что тогда пишется физически на твеёдый диск/винчестер? у нас есть 1) отрицательные чиосла, числа с запятой, и код хемминга. в 90е пользовался 32 битными компами. имеем - 1 бит на знак, сколько то бит на матиссу, и ещё биты на код хеммнинга. значит меньше чем 32 бита!
Программу как то писал и долго понять не мог почему при сравнении переменных, программа показывала что -15 больше 3? Обнаружил, что нет никаких"-", есть просто 15. Чуть позже написал метод с присвоением отрицательно знака числу..х=х-(х*2).
thx
В какой программе ты делаешь эти ролики ?
Premiere pro
@@AlekOS очень круто. Добавь крипту для донаток
Ну здравствуй, Winderton++
Чёт я не понял конец видео, обяьсните пожалуйста... Он говорит, что 7+3 будет -6, так как происходит переполнение. А как же получить 10?
Какое переполнение? У тебя двоичная система счисления. 1+1=0 и 1 в уме. Понял логику? Почему у автора выходит, что 1010 - это -6 одному богу известно. Чувак просто не понимает как работают представления отрицательных чисел в двоичном коде вообще и вводит в заблуждение весь народ. У него блять -0 в доп коде это единицы сука))) А это будет 0000 просто... Единицы будут в ОБРАТНОМ КОДЕ. Про доп код он плохо объяснил и возможно стоило бы показать пример на 8 битной записи, потому что так проще проводить аналогии с прямым и обратным кодом... А он видимо хотел попроще сделать материал для понимания и вышла просто куча говна. Из-за этого непонятно как записать даже не -10, а -128 к примеру. Нужно глубже изучить арифметику в доп коде. -10 будет 1111 0110, если использовать 8 битную запись. Это данные с википедии. А теперь к практике.
Так как же получить -10? Если представить просто 10 в двоичном, то выходит 1010. Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Двоичное число 0001010 имеет обратный код 11110101. Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
В 0-ом разряде возникло переполнение (1 + 1 = 10). Поэтому записываем 0, а 1 переносим на 1-й разряд. 11110101+00000001=11110110.
Автор просто сам не совсем как будто понимает как оно работает, либо зрителей держит за дураков и боится объяснять нормально, как это делали в школе. Но видимо, когда учился автор, то такое в школах ещё не объясняли на уроках информатики.
Уже месяц прошёл. Просто оставлю для других. Этот момент описан визуально на часах 11:40 . Так как регистр состоит из 3 битов, то максимальное число 7 положительное. А отрицательное -8 вышло Закольцевав концы мы и получаем эти часы. При переполнении разряда единице старшей некуда идти и число грубо говоря обнуляется, и мы попадаем в отрицательный диапазон или наоборот. Если же регистр содержит 4 бита под число, то 7+3=10 и переполнение будет, если мы ожидаем ответ 16.
Если говорить о частом типе данных integer 32, то в нем 32 бита и из них 31 идет под число, которое в положительном диапазоне равно 2 147 483 647. Если вдруг такие числа в вашем коде, то или вы ошиблись и убежали за этот диапазон в случае неправильной проверки цикла ,например (если работа с мелкими числами, а на выходе появляются такие) . Или же необходимо увеличить выделяемое место под переменную( если вы храните большие числа).
"Alek OS" Привет, а что за фоновая музыка?
@@awerbow спасибо большое
А как работают комплексные числа? Говорят, весь квантмех на них, и все квантовые компы тоже!
Проблемы с отрицательными числами не проблема, если не смотреть это видео, а прочитать просто книгу про эвм или информатику.... А после этого видео да, как и написал автор: "...то с отрицательными числами у нас возникает много проблем...." XDD
Спасибо огромное за это! Это мне помогло сдать сессию по программированию! Благодарю ❤❤❤
Где ты рисуешь такую графику?
А я то думаю, зачем в механизмах в майнкрафте для отрицательных чисел используют инвертирование. Спасибо за видео!
👍
Ну если нужно прорекламировать то оказывается имеет смысл начинать с языка, тем более высокоуровнего)
Важное дополнение насчёт флага переполнения.
На данный момент нет языка выше ассеблера, который поддерживал флаг переполнения. Сам флаг переполнения есть почти в каждой модели процессора, и нативный код его поддерживает. Но вот программисту он недоступен.
Для опроса флага переполнения придумана масса костылей, половина из них отваливается с новой версией компилятора.
Прикол, для ветерана "Cи" - новые операторы даже не вносились на голосование. Тишина...
комментарий для продвижения канала
Вам нужно начинать привыкать к отрицательным числам в экономике и вообще жизни. Молчать в тряпочку и привыкать.
На обычном для людей языке - траты.
Бомбит?
@@aiminvest Ты о ваших солдатиках? Да, их бомбит. И домой вернутся не все. А некоторые вернутся не целиком, а либо без некоторых частей, либо вообще частями. Слава великому пу. Вот только кем воевать будете с "кровожадным" НАТО", которое, правда, все никак не хочет напасть на рассеюшку?
@@neosvitan ох тыж, а ну скажи еще чего на шумерском?
@@neosvitan Умирает Барак Обама. Через 10 лет ему становится скучно, и он просит Бога отпустить его на Землю проведать, как поживает его страна. Бог отпускает.
Заходит Обама в Нью-Йорке в бар, заказывает пиво и спрашивает бармена, как страна поживает, как развивается, какие проблемы решает.
Бармен удивлённо:
- Какие проблемы могут быть? Мы же Великая империя, всё кругом наше.
- Как наше? А Ирак, Афганистан?
- Да уже всё наше!
- А Европа, Африка, Ближний Восток?
Бармен достаёт из-под стойки глобус и гордо крутит его:
- Я же говорю - мы империя, весь мир принадлежит нам!
Обама, радостный, гордый и довольный, допивает пиво и говорит:
- Ну, спасибо, друг! Сколько с меня?
Бармен:
- Один рубль и двадцать копеек...
Дружище, не сочти за труд, напиши названия треков в видео, уж очень зашли
ЧТО ПРОИСХОДИТ БЛЬЪЬЬВ
Кайф
нихера не понял!
На самом деле отрицательных чисел не существует, есть только положительные числа и есть операция вычитания. Иначе намажьте одну отрицательную колбасу на один отрицательный хлеб.
Никуда не подпишусь, буду верен ютубу
Ну зачем скиллбокс рекламировать!?
Деньги
@@yglyglya воо уважаю!
3.14здатый контент
Спасибо