Sure:
sar eax, 1
Код операции sar
отличается от shr
тем, что старший значащий (знаковый) бит сохраняется в sar
, и он установлен в 0 в shr
. Страница Арифметический сдвиг в Википедии показывает гораздо больше подробностей об этой операции в общем контексте.
Обратите внимание, что на машине дополнения 2 (которой является x86) это фактически вычисляет floor(eax / 2)
. В частности, это означает, что для целого числа x :
- для x = 0 , результат 0
- для x> 0 , результат равен floor (x / 2)
- для x <0 </em>, результат также равен floor (x / 2) или -ceil (-x / 2)
Последний результат дает результаты, которые могут быть неожиданными. Например, -3 sar 1 приводит к -2, а не -1. С другой стороны, 3 sar 1 приводит к 1.