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