
Как работают отрицательные числа - основы программирования
содержание видео
Дата: 2023-03-12
Похожие видео
Комментарии и отзывы: 20
Андрей
В сумматорах дополнительный бит выносится как выход переноса (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
ответить
В сумматорах дополнительный бит выносится как выход переноса (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
ответить
AVI-crak
Важное дополнение насчёт флага переполнения.
На данный момент нет языка выше ассеблера, который поддерживал флаг переполнения. Сам флаг переполнения есть почти в каждой модели процессора, и нативный код его поддерживает. Но вот программисту он недоступен.
Для опроса флага переполнения придумана масса костылей, половина из них отваливается с новой версией компилятора.
Прикол, для ветерана Cи - новые операторы даже не вносились на голосование. Тишина.
ответить
Важное дополнение насчёт флага переполнения.
На данный момент нет языка выше ассеблера, который поддерживал флаг переполнения. Сам флаг переполнения есть почти в каждой модели процессора, и нативный код его поддерживает. Но вот программисту он недоступен.
Для опроса флага переполнения придумана масса костылей, половина из них отваливается с новой версией компилятора.
Прикол, для ветерана Cи - новые операторы даже не вносились на голосование. Тишина.
ответить
Tupalov
Спасибо за очередной и очень полезный контент! Классно что рассказываешь какие были попытки реализации архитектуры для хранения отрицательных чисел, какие были изъяны и что придумали, чтобы их максимально минимизировать. Классно расширяет кругозор!
Поддерживаю тебя на патреоне, но в виду того, что со следующего месяца платежи с российский карт проходить не будут, какие есть еще способы поддержки? Будут ли работать карты виза на юмани?
ответить
Спасибо за очередной и очень полезный контент! Классно что рассказываешь какие были попытки реализации архитектуры для хранения отрицательных чисел, какие были изъяны и что придумали, чтобы их максимально минимизировать. Классно расширяет кругозор!
Поддерживаю тебя на патреоне, но в виду того, что со следующего месяца платежи с российский карт проходить не будут, какие есть еще способы поддержки? Будут ли работать карты виза на юмани?
ответить
Алик
Программу как то писал и долго понять не мог почему при сравнении переменных, программа показывала что -15 больше 3? Обнаружил, что нет никаких-, есть просто 15. Чуть позже написал метод с присвоением отрицательно знака числу. х=х-(х2.
ответить
Программу как то писал и долго понять не мог почему при сравнении переменных, программа показывала что -15 больше 3? Обнаружил, что нет никаких-, есть просто 15. Чуть позже написал метод с присвоением отрицательно знака числу. х=х-(х2.
ответить
Misha
Никто в интернете лучше не объясняет. Я перерыл все источники, но все равно не мог наглядно понять то, как именно увеличивается отрицательный диапазон на единицу (-128, а не -127. Просто огромный респект
ответить
Никто в интернете лучше не объясняет. Я перерыл все источники, но все равно не мог наглядно понять то, как именно увеличивается отрицательный диапазон на единицу (-128, а не -127. Просто огромный респект
ответить
itech
На самом деле отрицательных чисел не существует, есть только положительные числа и есть операция вычитания. Иначе намажьте одну отрицательную колбасу на один отрицательный хлеб.
ответить
На самом деле отрицательных чисел не существует, есть только положительные числа и есть операция вычитания. Иначе намажьте одну отрицательную колбасу на один отрицательный хлеб.
ответить
DragonProg
Любопытно. Недавно пересматривал видео, подумал, что не хочется их смотреть из-за интонации и общего контекста. Теперь же интонация изменилась, стало гораздо легче смотреть.
ответить
Любопытно. Недавно пересматривал видео, подумал, что не хочется их смотреть из-за интонации и общего контекста. Теперь же интонация изменилась, стало гораздо легче смотреть.
ответить
Ростислав
Отрицательных чисел нет. Невозможно исчеслять то чего не. Минус всего лишь направление если угодно. Минуснутых или плюсанутых нет, есть знак операции минус - вычитание.
ответить
Отрицательных чисел нет. Невозможно исчеслять то чего не. Минус всего лишь направление если угодно. Минуснутых или плюсанутых нет, есть знак операции минус - вычитание.
ответить
IIIA
Для меня самым интересным есть то, что я это все когда-то учил и, в принципе, знаю. Но сейчас это стало для меня немного понятнее и теперь мне лучше ясна эта тема. Спасибо
ответить
Для меня самым интересным есть то, что я это все когда-то учил и, в принципе, знаю. Но сейчас это стало для меня немного понятнее и теперь мне лучше ясна эта тема. Спасибо
ответить
Василий
Столкнулся с темой отрицательных чисел в java, там нет беззнакового байта, а данные были именно в этом формате. Пришлось писать преобразование.
ответить
Столкнулся с темой отрицательных чисел в java, там нет беззнакового байта, а данные были именно в этом формате. Пришлось писать преобразование.
ответить
gobpblu
В компьютерных науках есть только две сложные проблемы аннулирование кэша, придумывание названий и ошибка на единицу Леон Бамбрик: )
ответить
В компьютерных науках есть только две сложные проблемы аннулирование кэша, придумывание названий и ошибка на единицу Леон Бамбрик: )
ответить
Semen
Я знал только про прямой код, но теперь понимаю, что всё устроено чуть сложнее и удобнее. Спасибо за интересное качественное видео!
ответить
Я знал только про прямой код, но теперь понимаю, что всё устроено чуть сложнее и удобнее. Спасибо за интересное качественное видео!
ответить
Дмитрий
Бляяяя, я как будто новое анимэ для себя открыл и просмотрел все сезоны разом, а теперь меня ломает пока не выйдет новая серия
ответить
Бляяяя, я как будто новое анимэ для себя открыл и просмотрел все сезоны разом, а теперь меня ломает пока не выйдет новая серия
ответить
pcsekret
Чёт я не понял конец видео, обяьсните пожалуйста. Он говорит, что 7+3 будет -6, так как происходит переполнение. А как же получить 10?
ответить
Чёт я не понял конец видео, обяьсните пожалуйста. Он говорит, что 7+3 будет -6, так как происходит переполнение. А как же получить 10?
ответить
BoBr
Спасибо за ролик, знаю что с рекламой на ютубе сейчас плохо, так что отправил соточку на юмани, с миру по нитке так сказать: )
ответить
Спасибо за ролик, знаю что с рекламой на ютубе сейчас плохо, так что отправил соточку на юмани, с миру по нитке так сказать: )
ответить
Mrybs
А я то думаю, зачем в механизмах в майнкрафте для отрицательных чисел используют инвертирование. Спасибо за видео!
ответить
А я то думаю, зачем в механизмах в майнкрафте для отрицательных чисел используют инвертирование. Спасибо за видео!
ответить
Vladimir
Но самое крутое в дополнительном коде то, что даже умножение в нем не требует никаких ухищрений для учета знака.
ответить
Но самое крутое в дополнительном коде то, что даже умножение в нем не требует никаких ухищрений для учета знака.
ответить
Яков
Наконец-то разобрался с этим! Ещё интересно было бы в конце разобрать умножение числа на -1, тоже вкусный момент
ответить
Наконец-то разобрался с этим! Ещё интересно было бы в конце разобрать умножение числа на -1, тоже вкусный момент
ответить
ZProger
Сколько же сил и времени было вложено в этот контент.
Очень интересно смотреть, благодарю за информацию: )
ответить
Сколько же сил и времени было вложено в этот контент.
Очень интересно смотреть, благодарю за информацию: )
ответить
Gunnar
Алек! Давай про числа с плавающей точкой такой же видос! Этот IEEE 754 вообще тёмный лес. Растолкуй нам неучам.
ответить
Алек! Давай про числа с плавающей точкой такой же видос! Этот IEEE 754 вообще тёмный лес. Растолкуй нам неучам.
ответить
Добавить отзыв, комментарий
Другие видео канала















