Исправленный код.
#define Y (signed int)0x10000000L #includeРезультаты тестов: 0x000041b7 0x000041b7 - ARM mode 0x000041b7 0x00007fff - Thumb mode Компилятор IAR EW ARM 4.30Asigned int scale1 (signed int in_data) { signed int y = Y; in_data += (1L << 12); if (in_data >= y) in_data = y - 1; else if (in_data < -y) in_data = -y; return (in_data >> 13); } signed int scale2 (signed int in_data) { in_data += (1L << 12); if (in_data >= Y) in_data = Y - 1; else if (in_data < -Y) in_data = -Y; return (in_data >> 13); } int main() { signed int dat = 0x836DDFD; printf("0x%8.8x\t", scale1(dat)); printf("0x%8.8x\n", scale2(dat)); return 0; }