Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программный таймер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
Integro
Да, я полностью с вами согласен, но аргумент "здравый смысл" в моем случае не прокатил, да и не професcиональный аргумент, поэтому мне понадобилось хоть какое-то сноски.
scifi
Цитата(Golikov A. @ Apr 1 2015, 22:44) *
есть вещи которые описаны не стандартом а здравым смыслом и физикой природы...

Ага, "физика природы". А как насчёт порядка вычисления операндов в выражении? А если стандарт говорит, что этот порядок в данном случае не определён? А реверс-инжиниринг показал какой-то порядок? А завтра порядок изменился, потому что фаза Луны сменилась или что-то в этом духе? Может быть, лучше было мануал почитать?
Golikov A.
Вам нравиться слово реверс инжиниринг?

Данный вопрос не имеет отношения к экспериментальному установлению истины, которую и я считаю весьма зыбкой в условиях проф разработки.

Если на данный вопрос и есть ответ то не в стандартах С, а в стандартах представления двоичного числа и реализации операции вычитания.

ответ добывается так
1. представление числа в 2-ичном виде. Берем 2 числа, и 4 битную арифметику, числа 2 и 12 представляются как 0010 и 1100 - надеюсь тут не будет ремарки про реверс инжиниринг? Документальное подтверждение что числа представляются так надо искать в разделах математики.
2. Реализация вычитания, как сложение с дополнительным кодом числа. Тут опять я надеюсь обойдемся без реверс инжиниринга, документальное подтверждение не знаю где, в каких то книгах по информатики
и того 2 - 12 == 2 + @12 так я обозначил доп код 12.
2 == 0010, @12 == @1100 == (~(1100) + 1) == 0011 + 1 == 0100
3. Сложение 2 ичных числе, документальное подтверждение в разделах математики, реверс инжиниринг не применяем

2 - 12 == 2 + @12 == 0010 + @1100 == 0010 + 0100 == 0110 = 6


Теперь у меня вопрос к реверс инжинеру, что я сделал не так?

В данном конкретном случае просто так получается, это здравый смысл физики нашей природыsm.gif))) и никакого реверса...


Со знаковыми так не выходит, потому что в 4 битах у них только пол диапазона, то есть дойдя до 0111 до 7, они пойдут дальше до 1000, но в знаковом это -8. Надо понять главное это все представление чисел, это не их значения. Значения у них всегда одно оно не меняется, просто мы решили что 1000 - это -8 для знакового и 8 для без знакового, просто решили все операции происходят с двоичным исходником, всегда одинаково.

То есть важно понять что нет никакой магии или особо указания в том что мы вычитаем именно без знаковые, компилятор не делает ничего особенного увидев эту запись, он делает все те же операции что и обычно, просто результат представляет по другому. Получив в ходе вычитания 1000 для знакового результата он скажет что это -8, а для без знакового скажет что это +8 и все!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.