SM выиграл. Фенька в промежуточном явном приведении к типу signed char
#include
#include
void main (void)
{
unsigned char high_byte = 0xFF; // -251 dec
unsigned char low_byte = 0x05;
int result;
result = ((unsigned char) low_byte) | (((int)((signed char)high_byte)) << 8);
printf ("result = %ld\n", result);
result = low_byte | ( (int)(signed char)high_byte * 256 );
printf ("result = %ld\n", result);
result = low_byte | ( (int)(signed char)high_byte << 8 );
printf ("result = %ld\n", result);
getch ();
}