Compiler Version: Keil C51 5.0
I experienced some unexpected behaviour with the Keil C51 compiler. I have recreated the issue in the below code snippets.
Case 1: Result of bit shift operator is type casted from uchar (8b) to ulong (32b) correctly
unsigned long tempadcVal; unsigned char data_save_high = 0xA4; unsigned char data_save_low = 0x3F; //The expected 32b value without any information loss //Is loaded into tempadcVal tempadcVal = (data_save_high<<2) + (data_save_low>>6);
Case 2: Result of bit shift operator is not type casted from uint (16b) to ulong (32)
unsigned long modulated; unsigned int value = 0xA43F; modulated = value<<8; //Here we have modulated = 0x00003F00 (Wrong!) //Top 8 bits are wiped out
Is this behaviour by design or perhaps a mistake in the compiler?
Andrew, thank you for taking the time to read the original post. COuld you also read the follow up post I have written as a reply to @F Ex?
Thanks again
-Ishank