Арифметический сдвиг бит для целого числа со знаком

Я пытаюсь выяснить, как именно арифметические операторы битового сдвига работают в 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 !!!!!) 

Почему?

51
задан Peter Mortensen 8 August 2015 в 10:51
поделиться