Я пытаюсь выяснить, как именно арифметические операторы битового сдвига работают в C и как это повлияет на 32-разрядные числа со знаком. битовые целые числа.
Чтобы упростить задачу, допустим, мы работаем в пределах одного байта (8 бит):
x = 1101.0101
MSB[ 1101.0101 ]LSB
Читая другие сообщения на Stack Overflow и на некоторых веб-сайтах, я обнаружил, что:
<<
сместится в сторону MSB (в моем случае влево) и заполнит «пустые» биты LSB нулями.
И >>
сместится в сторону LSB (чтобы справа, в моем случае) и заполните "пустые" биты битом MS
Итак, x = x << 7
приведет к перемещению LSB в MSB и установке всего в 0s.
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 !!!!!)
Почему?