@@randomize4097 смешно Мы в школе месяц назад изучали, как делать презентации(не какие-то фишки PowerPoint'а, а просто то, как их создавать), сейчас создание сайтов начали изучать (самую банальщину по типу сайтов года из 2007). До этого рисовали открыточки в Paint'е. 11 класс, 2 семестр, скоро школу оканчивать.
Конечно, сравнивать каждого учителя и Хирьянова, который сперва в мфти преподавал, потом присоединился к фоксфорду... Да не в каждом хорошем вузе таких преподавателей больше десятка, кто живёт преподаванием
0:20 без знаковые и знаковые числа 0:25 запись беззнакового в память (0-255) 3:05 знаковые (запись в память) 3:20 знаковые-прямой код (-127...127) 4:40 знаковые-обратный код (-127...27) 6:20 дополнительный код (-128...127) 8:20 преимущество доп.кода
Я читал Computer Science an overview, на тот момент для меня сложной была двоичная система, но когда я увидел two's complement, я просто ох##ел, я подумал здесь я брошу все к черту... Спасибо за Ваш урок, лучшее объяснение двоичного дополнительного кода и смысла его применения, по сути он сложнее просто двоичной системы счисления, но придуман чтобы упростить архитектуру процессора... 🔥🔥🔥
На 4.15-4.20 оговорился? "Если у меня число положительное, то отрицательное число в прямом коде будет выглядеть точно так же как беззнаковое число, а отрицательное будет отличаться". Тема раскрыта очень хорошо - только суть, на что и требуется обращать внимание.
Обращу внимание, что при переводе, обратный код инвертируется только для отрицательных чисел. Если пк положителен, то ок его просто повторяет (напр. 0,1000пк = 0,1000ок).
Ну, если вы из прямого кода переводите в обратный код, то да, будет отличаться только представление для отрицательных чисел. Нужно инвертировать биты модуля числа. Но если в обратном коде вам нужно из отрицательного числа получить положительное, то вы точно так же инвертируете биты исходного числа в обратном коде. Получите положительное число в ОК, которое совпадает с ПК. То есть, инвертирование битов это процедура смены знака числа в ОК.
Хоть и спустя год, но может быть кому-то будет полезно.. Рассмотрим, например, доп. код для одного байта (8 бит). Старший бит - знаковый. Тогда имеем, что самое минимальное число, записанное в доп. коде имеет следующее двоичное представление: 1000 0000 = -(2^7) = -128. Почему не 1111 1111? Всё просто: представлению из всех 8-ми единиц будет соответствовать: число -(2^7) + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = -1, что явно больше -128. Наибольшее же число в доп. коде будет иметь двоичное представление: 0111 1111 = 127. Как-то так.
У него для работы со знаковыми и беззнаковыми числами отдельные инструкции/опкоды. Когда число лежит в регистре по нему уже не скажешь его старший бит это знаковый бит или цифровой. Так что все определяется правильностью описания типа переменной в исходном коде программы и правильностью компиляции под нужный процессор с определённой системой команд.
А если вопрос о том как процессор понимает откуда брать знак если число заведомо со знаком, то тут вопросов нет - это всегда самый старший бит, крайний левый.
Уже практически написал приложение для умного дома на .NET, но только после этого видео реально понял как представляются знаковые числа в байтах))) Спасибо огромное!
Объясняет неплохо, но вот число 99 неудачное в том смысле, что когда переводишь его в двоичную систему, с какой стороны не пиши, все получится 1100011 и сразу непонятно, после деления в каком порядке остатки записывать. А порядок после деления следующий: последний оставшийся остаток будет первой цифрой, если записывать число слева направо как нам привычно, соответственно первый остаток после самого начального деления числа на 2 - будет последней цифрой в записи числа в двоичной системе. Я наверное тоже объясняю так себе, но так мне лучше запомнилось, может кому поможет.
а что в случае числа к примеру 21 и -21, в беззнаковой системе выходит 10101, полностьтю 00010101, теперь берем -21 в прямой код и выходит 10010101, теперь вопрос с обратным кодом, нужно ли инвертировать 2 нуля которые идут после старшого бита или нет?
А если число в виде строки введено '1234567890' как программно перевести это в двоичное число. Можно на цифры разбить, а потом перемножить соответствующие цифры на 10,100,1000... А потом сложить. Или можно как-то проще.
Блин. а я до этого самостоятельно в Майнкрафте доходил .Я увидел схему сумматора, работающего на вычитание. Но сложение и вычитание отрицательных чисел я постигал сам. На моей схеме это было так уменьшаемое с прямым кодом ,вычитаемое с обратным +1 от сумматора, то есть дополнительный код. лишний разряд сообщал о знаке. Но если число меняло знак схема не работала. Я добавил инверсию результата плюс один, то есть дополнительный код. Но чтобы схема работала добавил фильтры и сделал так, чтобы работа одного фильтра прекращала работу второго.
Многие тут пишут что не вполне понятно. Естественно, для того что было понятно нужно больше примеров разбирать. И понимать смысл всех этих махинаций с цифрами который выдумали программисты.
Эх Хирьянов, Хирьянов. Ожидал большего. МФТИ все ж. Объясни, зачем ты взял число 99? Чтобы показать, как переводить его в двоичный код в столбик? Не лучше ли было взять числа 127, -128, 1, -1 и 0? Если добавить к положительному знаковому 127 единицу (в двоичном коде 01111111 + 00000001), получим единицу в седьмом - знаковом разряде байта (10000000). Сразу вопрос: это число -0 (минус ноль) или -128 (минус 128)? В компе это число -128. Почему? Вот с этого и нужно было начать.
Самое главное не рассказали - а зачем, собственно, нужен обратный и дополнительный код и почему не подходит прямой код, который максимально соответствует записи числа в математике - просто взяли положительное число и приписали ему знак. А нужен как раз для того, для чего в свое время в математике не хватило натуральных чисел и потребовалось ввести отрицательные числа - 1) для того чтобы выполнять вычитание с любыми парами чисел 2) для того чтобы свести операцию вычитания к операции сложения: a-b = a + (-b) Просто для записи отрицательных чисел в компьютере по п.1 достаточно и прямого кода - бит знака приписали и вперёд. Но с реализацией п. 2 можно в АЛУ не реализовывать схемы для вычитания, а только лишь для суммирования. Правда, при этом нужно ещё реализовать блок получения обратного/дополнительного кода для второго операнда 😏 Не сильно упростили, да. А ещё при операциях в обратном коде результат, получается на 1 меньше чем нужно. А ещё возникает отрицательный ноль, в дополнение в положительному нулю. И для того чтобы его забороть теперь уже сложение заменяют на вычитание с обратным кодом второго числа 😏 И для решения всех этих проблем есть дополнительный код. Казалось бы. Но нет, там свои проблемы, своя магия, и свои договорняки и условности - сюда смотрим, сюда не смотрим, тут бит отбрасываем, а, вот тут - нет. Так же просто как с беззнаковыми, операции в доп коде все равно не получаются.
Вопрос: "Почему при вычитании чисел 4 - 7 в прямом коде, я не могу получить отриц.результат? 4 -> 0100 (в прямом коде) 7 -> 0111 (в прямом коде) Разность 4 - 7 должна дать 1011, но в результате я получаю 0X11, где X - какое - то значение, которое я не могу получить, т.к "занять" 1 из след.разряда я не могу.
th-cam.com/video/g6Y86fAqXEY/w-d-xo.htmlm12s "дописывать значащие нули справа, значит завышать это число УВЕЛИЧИВАТЬ ЕГО НА 2" - неверно, не на два, потому что все разряды сдвинутся и 11000110 - это уже 198 в десятиричной
Так он и имел ввиду сдвинуться на разряд, ты не понял о чем человек говорит, зато настрочил бредовый коммент! Ты чтобы сдвинуть число на разряд, что должен сделать? Так понятно???
Извините за занудство, но преподаватель должен правильно склонять числительные. Не "от сто двадцать семь", а от стА двадцатИ семИ. Не "до двухста", а до двухсот.
пыталась найти на эту тему видеоурок - лень было самой сто раз объяснять. Посмотрела- чуть не чокнулась. Это кошмар какой-то. Не тратьте время. Для детей не пойдет, он сам в себе рассказывает непонятные вещи, трудно понять чего он хочет донести своим рассказом.
наверное для студентов это понятно, но это материал 9 класса школы, я знаю детей, как минимум его рассказ должен быть логичным и связным, должно присутствовать понятное для детского восприятия и последовательное объяснение. Я никого не осуждаю, просто для детей это не годится.Каша. Слишком сумбурно.
+Lar Q я знал, что такие коды есть, но о алгоритмах их составления я не знал ничего. После просмотра данного видеоурока я понял что к чему, всё просто и понятно, мне кажется, проблема в вас
Красавэлчик. За 10 минут объяснил на 100% лучше, чем за полтора часа на паре в универе.
+
Странно что в универе ты этого не знаешь, это школьная тема.
@@randomize4097 смешно
Мы в школе месяц назад изучали, как делать презентации(не какие-то фишки PowerPoint'а, а просто то, как их создавать), сейчас создание сайтов начали изучать (самую банальщину по типу сайтов года из 2007). До этого рисовали открыточки в Paint'е. 11 класс, 2 семестр, скоро школу оканчивать.
@@b-ecky__ афигеть, мы в 7 уже писали программы простые, а сейчас сайт пишем (я в 8)
@@b-ecky__ Куда поступил?
Да, посмотрев это шикарное объяснение поняла, что наш учитель вообще ничего толком не объяснил.спасибо))
Конечно, сравнивать каждого учителя и Хирьянова, который сперва в мфти преподавал, потом присоединился к фоксфорду...
Да не в каждом хорошем вузе таких преподавателей больше десятка, кто живёт преподаванием
За 10 минут объяснил лучше, чем препод в универе за 6 месяцев! Почему у нас преподы не такие крутые, как он, эх
да2, в точку!
Ля, кто то щас в универе, а нам это в школе в 7-8 класс изучать надо ...
10 класс повторяем если хочешь в 11 учи нормально!)
@@DioMayweather я информатику сдавать не буду, не хочу программистом быть, спасибо
@@doctorzuck2009 согласен, сам учусь на прграммиста, не советую ни кому.
Я сейчас в 7-мои классе, у нас уже преподают
@@doctorzuck2009 куда поступил в итоге?)А так...в тех вузах везде есть инфа и программирование
Классный урок, для Универа то что нужно) спасибо большое!!!! Продолжайте снимать подобные видео
Спасибо, мужик
0:20 без знаковые и знаковые числа
0:25 запись беззнакового в память (0-255)
3:05 знаковые (запись в память)
3:20 знаковые-прямой код (-127...127)
4:40 знаковые-обратный код (-127...27)
6:20 дополнительный код (-128...127)
8:20 преимущество доп.кода
Объяснение лучше, чем на курсах программирования)
Значит хреновые курсы, бегите оттуда. Или вы просто на этих курсах были не внимательны.
Я читал Computer Science an overview, на тот момент для меня сложной была двоичная система, но когда я увидел two's complement, я просто ох##ел, я подумал здесь я брошу все к черту... Спасибо за Ваш урок, лучшее объяснение двоичного дополнительного кода и смысла его применения, по сути он сложнее просто двоичной системы счисления, но придуман чтобы упростить архитектуру процессора... 🔥🔥🔥
На 4.15-4.20 оговорился? "Если у меня число положительное, то отрицательное число в прямом коде будет выглядеть точно так же как беззнаковое число, а отрицательное будет отличаться".
Тема раскрыта очень хорошо - только суть, на что и требуется обращать внимание.
А где объяснение, почему сложение после преобразования будет работать правильно?
Обращу внимание, что при переводе, обратный код инвертируется только для отрицательных чисел.
Если пк положителен, то ок его просто повторяет (напр. 0,1000пк = 0,1000ок).
Ну, если вы из прямого кода переводите в обратный код, то да, будет отличаться только представление для отрицательных чисел. Нужно инвертировать биты модуля числа.
Но если в обратном коде вам нужно из отрицательного числа получить положительное, то вы точно так же инвертируете биты исходного числа в обратном коде. Получите положительное число в ОК, которое совпадает с ПК. То есть, инвертирование битов это процедура смены знака числа в ОК.
А как записать 158 например, сколько битов надо брать?
Блин, ну скажите ещё раз, мне бестолковому, почему диапазон в дополнительном коде увеличивается на единицу ?
Хоть и спустя год, но может быть кому-то будет полезно.. Рассмотрим, например, доп. код для одного байта (8 бит). Старший бит - знаковый. Тогда имеем, что самое минимальное число, записанное в доп. коде имеет следующее двоичное представление: 1000 0000 = -(2^7) = -128. Почему не 1111 1111? Всё просто: представлению из всех 8-ми единиц будет соответствовать: число -(2^7) + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = -1, что явно больше -128.
Наибольшее же число в доп. коде будет иметь двоичное представление: 0111 1111 = 127.
Как-то так.
Спасибо тимофею фёдоровичу хирьянову за всё ❤
А как процессор узнает где обычный бит, а где знаковый?
У него для работы со знаковыми и беззнаковыми числами отдельные инструкции/опкоды. Когда число лежит в регистре по нему уже не скажешь его старший бит это знаковый бит или цифровой. Так что все определяется правильностью описания типа переменной в исходном коде программы и правильностью компиляции под нужный процессор с определённой системой команд.
А если вопрос о том как процессор понимает откуда брать знак если число заведомо со знаком, то тут вопросов нет - это всегда самый старший бит, крайний левый.
@@ВладимирНиколаевич-ь4о Спасибо за ответ, хоть и запоздалый.
@@antongreen5903 интернет приучил к немедленным ответам?
@@ВладимирНиколаевич-ь4о эх, если бы.
пиво пиво водочка плывет по морю лодочка
Уже практически написал приложение для умного дома на .NET, но только после этого видео реально понял как представляются знаковые числа в байтах))) Спасибо огромное!
Вай, Братишка, ты красаучик максимальный, аййй, спасибо большой тебе!
Но почему число в конце обратного когда 01 а не 00 я не понял
Объясняет неплохо, но вот число 99 неудачное в том смысле, что когда переводишь его в двоичную систему, с какой стороны не пиши, все получится 1100011 и сразу непонятно, после деления в каком порядке остатки записывать. А порядок после деления следующий: последний оставшийся остаток будет первой цифрой, если записывать число слева направо как нам привычно, соответственно первый остаток после самого начального деления числа на 2 - будет последней цифрой в записи числа в двоичной системе. Я наверное тоже объясняю так себе, но так мне лучше запомнилось, может кому поможет.
Вот это да, супер, нет слов
а что в случае числа к примеру 21 и -21, в беззнаковой системе выходит 10101, полностьтю 00010101, теперь берем -21 в прямой код и выходит 10010101, теперь вопрос с обратным кодом, нужно ли инвертировать 2 нуля которые идут после старшого бита или нет?
А если число в виде строки введено '1234567890' как программно перевести это в двоичное число.
Можно на цифры разбить, а потом перемножить соответствующие цифры на 10,100,1000...
А потом сложить.
Или можно как-то проще.
спасибо огромное, все четко и в одном месте))
Блин. а я до этого самостоятельно в Майнкрафте доходил .Я увидел схему сумматора, работающего на вычитание. Но сложение и вычитание отрицательных чисел я постигал сам. На моей схеме это было так уменьшаемое с прямым кодом ,вычитаемое с обратным +1 от сумматора, то есть дополнительный код. лишний разряд сообщал о знаке. Но если число меняло знак схема не работала. Я добавил инверсию результата плюс один, то есть дополнительный код. Но чтобы схема работала добавил фильтры и сделал так, чтобы работа одного фильтра прекращала работу второго.
5:35 - не понял всё таки что значит "за вычетом единицы" ?
Pavel Kenov 1000 - 1 = 111
имеется в виду, что при 7 битах можно записать числа от 0 до 2^7 - 1 = 128 - 1 = 127
Супер объяснение!
Спасибо большое!!!
Многие тут пишут что не вполне понятно. Естественно, для того что было понятно нужно больше примеров разбирать. И понимать смысл всех этих махинаций с цифрами который выдумали программисты.
очень интересно ! Спасибо
Эх Хирьянов, Хирьянов. Ожидал большего. МФТИ все ж. Объясни, зачем ты взял число 99? Чтобы показать, как переводить его в двоичный код в столбик? Не лучше ли было взять числа 127, -128, 1, -1 и 0? Если добавить к положительному знаковому 127 единицу (в двоичном коде 01111111 + 00000001), получим единицу в седьмом - знаковом разряде байта (10000000). Сразу вопрос: это число -0 (минус ноль) или -128 (минус 128)? В компе это число -128. Почему? Вот с этого и нужно было начать.
спасибо. Очень помогли
Самое главное не рассказали - а зачем, собственно, нужен обратный и дополнительный код и почему не подходит прямой код, который максимально соответствует записи числа в математике - просто взяли положительное число и приписали ему знак.
А нужен как раз для того, для чего в свое время в математике не хватило натуральных чисел и потребовалось ввести отрицательные числа - 1) для того чтобы выполнять вычитание с любыми парами чисел 2) для того чтобы свести операцию вычитания к операции сложения: a-b = a + (-b)
Просто для записи отрицательных чисел в компьютере по п.1 достаточно и прямого кода - бит знака приписали и вперёд. Но с реализацией п. 2 можно в АЛУ не реализовывать схемы для вычитания, а только лишь для суммирования. Правда, при этом нужно ещё реализовать блок получения обратного/дополнительного кода для второго операнда 😏 Не сильно упростили, да. А ещё при операциях в обратном коде результат, получается на 1 меньше чем нужно. А ещё возникает отрицательный ноль, в дополнение в положительному нулю. И для того чтобы его забороть теперь уже сложение заменяют на вычитание с обратным кодом второго числа 😏
И для решения всех этих проблем есть дополнительный код. Казалось бы. Но нет, там свои проблемы, своя магия, и свои договорняки и условности - сюда смотрим, сюда не смотрим, тут бит отбрасываем, а, вот тут - нет. Так же просто как с беззнаковыми, операции в доп коде все равно не получаются.
Хорошо было бы, еслиб вы рассказали еще про смещенный код. Но в целом урок понравился)
ребят ну я не поняла про обратный код ,как он инвентируется
знаковый(старший) бит не изменяется, а в остальных битах единица изменяется на ноль, а ноль на единицу.
Просто супер 👍🏼
Признаюсь, не ожидал его здесь увидеть :D
А как быть с числами больше 127 в дополнительном коде
Там потребуется уже несколько байтов
Оговорка. Записывать ноль слева значит умножать число на два а не увеличить на два.
Молодец!
большое спасибо
Вопрос: "Почему при вычитании чисел 4 - 7 в прямом коде, я не могу получить отриц.результат?
4 -> 0100 (в прямом коде)
7 -> 0111 (в прямом коде)
Разность 4 - 7 должна дать 1011, но в результате я получаю 0X11, где X - какое - то значение, которое я не могу получить, т.к "занять" 1 из след.разряда я не могу.
потому что вычитание есть сложение с противоположным числом
Пасиб
Спасибо, я не понял
Молодец
thank you
лучший препод по инфе в рунете, настоящий Русский человек.
почему от -128 до 127, а не от -128 до 128?
Там от -127 до 127 . Если возьмешь 128 то для знака места не будет
@@junovevo4961 для допкода как раз именно -128..127
Thanks
Красава
оксфорд фоксфорд :)
Какая кодировка? (ASCII?) Машинный код бывает разным, около 20 видов 🗿
Чему учили то?
а то я с урока нихрена не понял
ну почти
Не объяснил для чего нужен обратный код, сначала спросил, потом не ответил(
А суть урока и не в обратном коде, а в дополнительном двоичном коде...
th-cam.com/video/g6Y86fAqXEY/w-d-xo.htmlm12s
"дописывать значащие нули справа, значит завышать это число УВЕЛИЧИВАТЬ ЕГО НА 2" - неверно, не на два, потому что все разряды сдвинутся и 11000110 - это уже 198 в десятиричной
Так он и имел ввиду сдвинуться на разряд, ты не понял о чем человек говорит, зато настрочил бредовый коммент! Ты чтобы сдвинуть число на разряд, что должен сделать? Так понятно???
ххихихииххихи
Ужасное объяснение, чё за накрученные комменты
Извините за занудство, но преподаватель должен правильно склонять числительные. Не "от сто двадцать семь", а от стА двадцатИ семИ. Не "до двухста", а до двухсот.
Пошол на
пыталась найти на эту тему видеоурок - лень было самой сто раз объяснять. Посмотрела- чуть не чокнулась. Это кошмар какой-то. Не тратьте время. Для детей не пойдет, он сам в себе рассказывает непонятные вещи, трудно понять чего он хочет донести своим рассказом.
+Lar Q Напрасно вы так думаете :) Наши студенты любят Тимофея Федоровича Хирьянова, никто еще не говорил, что он объясняет непонятно.
наверное для студентов это понятно, но это материал 9 класса школы, я знаю детей, как минимум его рассказ должен быть логичным и связным, должно присутствовать понятное для детского восприятия и последовательное объяснение. Я никого не осуждаю, просто для детей это не годится.Каша. Слишком сумбурно.
+Lar Q Слушай, нормально он рассказывает, я тебе говорю, ааай как красиво
+Lar Q я знал, что такие коды есть, но о алгоритмах их составления я не знал ничего. После просмотра данного видеоурока я понял что к чему, всё просто и понятно, мне кажется, проблема в вас
Наоборот, все очень понятно и заходит с первого раза. Сразу видно, что препод разбирается в своём деле
какой красивый мужчина))
спасибо, посмотрела!