И что, он ни о чем не говорит. Ты берешь число со знаком, которое печатается как long. Расширения знака не происходит. Попробуй его напечатать как %d и увидишь. Более того, я несколько изменил код, в соответствии со своими заявлениями и все работает корректно
#include
#include
void main (void)
{
unsigned char high_byte = 0xFF; // -251 dec
unsigned char low_byte = 0x05;
int result;
result = low_byte | ((int)high_byte << 8);
printf ("result = %d\n", result);
result = low_byte | ( (int)(signed char)high_byte * 256 );
printf ("result = %d\n", result);
result = low_byte | ( (int)(signed char)high_byte << 8 );
printf ("result = %d\n", result);
getch ();
}
Можете проверить.