ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
656217 Топик полностью
Николай Коровин (26.02.2016 21:54, просмотров: 193) ответил mr-x на Сейчас проверить, к сожалению, не могу. Всё на работе осталось до понедельника.
Тьфу, во я тупой, а. Не заметил, что второе число — отрицательное! Естественно, если из положительного вычесть отрицательное, получим большой положительный результат. А обреза́ть его до 16, рассматривая старший бит как знаковый (и перекидывая его в минус) — компилятор вовсе не должен! Потому что размер выбирается нативно платформе. Вот теперь всё яснее ясного. int16_t a1, a2, a3; a1 = 0x2423; //9251 dec a2 = 0x85c1; //-31295 dec a3 = a1 - a2; // == 0x9e62 == -24990 (int)inner_register = (int)a1 - (int)a2; //40546 > 0 !!! Из двух моих вариантов первый будет работать как задумано (обрезать старшие биты до 16 и из 40546 делать -24990), а второй — нет. Блин, внимательнее надо быть, заметил бы, что a2 < 0 — сразу бы и ответ дал исчерпывающий.