Я пытаюсь выяснить, как именно арифметические операторы сдвига битов работают в C, и как это повлияет на 32-разрядные целые числа со знаком.
Чтобы упростить задачу, скажем, мы работаем в пределах одного байта (8 бит):
x = 1101.0101
MSB[ 1101.0101 ]LSB
Читая другие посты на Stack Overflow и на некоторых веб-сайтах, я обнаружил, что: <<
сместится в сторону MSB (в моем случае влево) и заполнит «пустой» LSBбиты с 0 с.
и >>
сместятся в сторону LSB (в моем случае вправо) и заполнят "пустые" биты битом MS
Так, x = x << 7
приведет кпереводя LSB в MSB и устанавливая все в 0 с.
1000.0000
Теперь, скажем, я бы >> 7
, последний результат.Это приведет к [0000.0010]
?Я прав?
Прав ли я в своих предположениях об операторах смены?
Я только что проверил на своей машине, **
int x = 1; //000000000......01
x = x << 31; //100000000......00
x = x >> 31; //111111111......11 (Everything is filled with 1s !!!!!)
Почему?