-
- Знаковый. Беззнаковый "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)