I am trying to figure out how exactly arithmetic bit-shift operators work in C, and how it will affect signed 32-bit integers.
To make things simple, let's say we work within one byte (8 bits):
x = 1101.0101
MSB[ 1101.0101 ]LSB
Reading other posts on Stack Overflow and some websites, I found that:
<<
will shift toward MSB (to the left, in my case), and fill "empty" LSB bits with 0s.
And >>
will shift toward LSB (to the right, in my case) and fill "empty" bits with MS bit
So, x = x << 7
will result in moving LSB to MSB, and setting everything to 0s.
1000.0000
Now, let's say I would >> 7
, last result. This would result in [0000.0010]
? Am I right?
Am I right about my assumptions about shift operators?
I just tested on my machine, **
int x = 1; //000000000......01
x = x << 31; //100000000......00
x = x >> 31; //111111111......11 (Everything is filled with 1s !!!!!)
Why?
2
. If any multiplication overflows you have Undefined Behaviour. – Entomo