I have a small query in c,
I am using the bitwise left shift on number 69 which is 01000101 in binary
01000101 << 8
and I get answer as 100010100000000
Shouldn't it be all 8 zeros i.e. 00000000 as we shift all the 8 bits to left and then pad with zeros.
It is because of the literal (default data type) for a number (int) is, in most of nowadays CPU, greater than 8-bit (typically 32-bit) and thus when you apply
69 << 8 //note 69 is int
It is actually applied like this
00000000 00000000 00000000 01000101 << 8
Thus you get the result
00000000 00000000 01000101 00000000
If you use, say, unsigned char specifically, then it won't happen:
unsigned char a = 69 << 8; //resulting in 0
This is because though 69 << 8 itself will still result in
01000101 00000000
But the above value will be casted to 8-bit unsigned char, resulting in:
00000000
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With