Ответ относится к двоичной записи дополнения.Цель sra
- поддержать отрицательные числа, представленные в дополнении к двум.Самый старший бит, равный единице, если значение отрицательное, дублируется при смещении вправо «арифметическим» образом.
На 32-разрядном x86 это означает, что:
53 = 00000000000000000000000000110101
-53 = 11111111111111111111111111001011
srl( 53, 2) = 13 = 00000000000000000000000000001101
-13 = 11111111111111111111111111110011
sra(-53, 2) = -14 = 11111111111111111111111111110010
Полагаю, нужно понимать, что в дополнении к двум отрицательное число - это не инверсия каждого бита числа - это инверсия каждого бита, а затем добавление 1 к этому числу.Рассмотрим:
1 = 0000001
-1 = 1111111
Не:
-1 = 1111110
Что привело бы к:
0 = -1 + 1 = 11111111
Другими словами, в дополнении к двум нет отрицательного нуля,Ноль занимает место в области, иначе считается «положительным знаком», поскольку старший бит равен нулю.