-
- Во блин, развели срач. Ассемблера на вас нет, ренегаты. Все ведь на асме считали, как же клёво было. Сдвиги, флаги, банки памяти... (рыдая). - Барбос(26.02.2016 22:14)
- Асм вон где зело надобен → - Николай Коровин(26.02.2016 22:25, ссылка)
- "Асм уже затем надобен, что он мозги в беспорядок приводит" (с) Починосов. Барбос(257 знак., 26.02.2016 22:38)
- Асм вон где зело надобен → - Николай Коровин(26.02.2016 22:25, ссылка)
- У людей есть одно понятие больше/меньше у ассемблера два misyachniy(720 знак., 26.02.2016 21:05)
- Компилятор на такое присваивание не ругается и интерпретирует его однозначно. Результат будет совсем одинаковый. И это пример, в программе присваиваний констант нет. Проблема была в преобразовании типов при вычитании. Пробел в образовании. - mr-x(26.02.2016 21:42)
- Я тоже считаю, что компиляторы не ошибаются. misyachniy(127 знак., 26.02.2016 21:55)
- Спасибо! Чётко и ясно! - De_User(26.02.2016 21:14)
- Компилятор на такое присваивание не ругается и интерпретирует его однозначно. Результат будет совсем одинаковый. И это пример, в программе присваиваний констант нет. Проблема была в преобразовании типов при вычитании. Пробел в образовании. - mr-x(26.02.2016 21:42)
- Два варианта: ( (int16_t)(a1-a2) > 0 ) и ( (int)a1 - (int)a2) > 0 ) чего дают? А то я сначала каркнул, а потом призадумался — до чего укурочным порой бывает преобразование типа О_о - Николай Коровин(26.02.2016 19:21)
- Сейчас проверить, к сожалению, не могу. Всё на работе осталось до понедельника. mr-x(574 знак., 26.02.2016 20:31)
- Тьфу, во я тупой, а. Не заметил, что второе число — отрицательное! Естественно, если из положительного вычесть отрицательное, получим большой положительный результат. А обреза́ть его до 16, рассматривая старший бит как знаковый (и перекидывая Николай Коровин(529 знак., 26.02.2016 21:54)
- Спасибо! - mr-x(26.02.2016 22:18)
- Тьфу, во я тупой, а. Не заметил, что второе число — отрицательное! Естественно, если из положительного вычесть отрицательное, получим большой положительный результат. А обреза́ть его до 16, рассматривая старший бит как знаковый (и перекидывая Николай Коровин(529 знак., 26.02.2016 21:54)
- Сейчас проверить, к сожалению, не могу. Всё на работе осталось до понедельника. mr-x(574 знак., 26.02.2016 20:31)
- В данном компиляторе int16_t это signed или unsigned? - De_User(26.02.2016 18:25)
- Знаковый. Беззнаковый "uint16_t". "int" - 32-х битный. - mr-x(26.02.2016 18:27)
- Если int16_t знаковый, то 16 бит для результата не достаточно. + 9'251 - ( - 31'295 (= 0x85C1)) = 40'546 - De_User(26.02.2016 18:32 - 18:45)
- Я зря про 2+2 написал в первой строке. Ксению, вона, с толку сбил. К арифметике вопросов нет, оно посчитается одинаково независимо от типов. Обескураживает сравнение с нулем результата вычитания. - mr-x(26.02.2016 20:16)
- Тогда вопрос на засыпку: какую разрядность имеет сумма (или разность) двух 16 разрядных чисел? По Вашему мнению? - De_User(26.02.2016 20:41)
- Я всегда полагал, что 16-ти разрядную. Это не так? - mr-x(26.02.2016 20:43)
- Результат 17 бит, т.е. 16 + знак. При выполнении третьей операции, сравнения в "Условие (a1 - a2 > (int16_t)0) со знаком явно проблемы. - De_User(26.02.2016 21:00)
- Нет, конечно. Int-y для данного компилятора. - Олдфаг(26.02.2016 20:45, )
- Аффтор / ТС клянётся что у него int16_t двухбайтные. - De_User(26.02.2016 20:49)
- Нет. Посмотрите, он пишет что int == int32 - Олдфаг(26.02.2016 20:51, )
- И при этом у аффтора a1 = 0x2423; a2 = 0x85c1. Куда тогда делись ещё 4 знакоместа, чтоб было 0x00002423 и 0xFFFF85C1? - De_User(26.02.2016 21:02)
- В условном операторе, если Вы его не принудите к другому формату, компилятор делает вычсисления в int: int(a) - int(b). Итого (0x00002423-0xffff85c1). Результат тоже рассматривается как int и он явно < 0x80000000, т.е. больше 0. - Олдфаг(26.02.2016 21:22, )
- Т.е. как всегда: если что то непонятно, то смотри Asm код. - De_User(26.02.2016 21:46)
- А теперь осталось поняль, на кой хрен мучить 32 - разрядный МК "обрезанными" 16 - разрядными переменными? - De_User(26.02.2016 21:43)
- Чота ты возбужденный какой-то. Выпил - ложись спать. - mr-x(26.02.2016 21:45)
- И, таки да, на тупость обычно агрессивно реагирую. - De_User(26.02.2016 21:48)
- Чота ты возбужденный какой-то. Выпил - ложись спать. - mr-x(26.02.2016 21:45)
- Спасибо за науку! - mr-x(26.02.2016 21:29)
- В условном операторе, если Вы его не принудите к другому формату, компилятор делает вычсисления в int: int(a) - int(b). Итого (0x00002423-0xffff85c1). Результат тоже рассматривается как int и он явно < 0x80000000, т.е. больше 0. - Олдфаг(26.02.2016 21:22, )
- И при этом у аффтора a1 = 0x2423; a2 = 0x85c1. Куда тогда делись ещё 4 знакоместа, чтоб было 0x00002423 и 0xFFFF85C1? - De_User(26.02.2016 21:02)
- Нет. Посмотрите, он пишет что int == int32 - Олдфаг(26.02.2016 20:51, )
- Аффтор / ТС клянётся что у него int16_t двухбайтные. - De_User(26.02.2016 20:49)
- Я всегда полагал, что 16-ти разрядную. Это не так? - mr-x(26.02.2016 20:43)
- Тогда вопрос на засыпку: какую разрядность имеет сумма (или разность) двух 16 разрядных чисел? По Вашему мнению? - De_User(26.02.2016 20:41)
- Я зря про 2+2 написал в первой строке. Ксению, вона, с толку сбил. К арифметике вопросов нет, оно посчитается одинаково независимо от типов. Обескураживает сравнение с нулем результата вычитания. - mr-x(26.02.2016 20:16)
- Если int16_t знаковый, то 16 бит для результата не достаточно. + 9'251 - ( - 31'295 (= 0x85C1)) = 40'546 - De_User(26.02.2016 18:32 - 18:45)
- Знаковый. Беззнаковый "uint16_t". "int" - 32-х битный. - mr-x(26.02.2016 18:27)
- Так оно и должно быть с 16-разрядными числами. Ксения(123 знак., 26.02.2016 17:22 - 17:41)
- …стареем мы с тобою… внимательность уже не та :( 0x00002423 - 0xFFFF85c1 = 0x00009E62 vs 0x00002423 - 0xFFFF85c1 = 0x9E62 :( Первое больше нуля, второе — меньше. - Николай Коровин(26.02.2016 22:07)
- Да, конечно. Проблема с условием. 9E62 меньше нуля если оно находится в переменной и больше нуля если оно результат вычитания. - mr-x(26.02.2016 17:52)
- Во блин, развели срач. Ассемблера на вас нет, ренегаты. Все ведь на асме считали, как же клёво было. Сдвиги, флаги, банки памяти... (рыдая). - Барбос(26.02.2016 22:14)