Оптимизация ради оптимизации не мной придуманное понятие. Столкнулся тут на днях...
Деление - достаточно трудоемкая для процессора операция.
Деление на два = битовый сдвиг значения на бит вправо, при этом сами затраты - 1 такт.
Казалось-бы оптимизация.
Но что мы получим в случае -1 (0xFFFFFFFF)?
На делении, как и полагается - ноль, а на сдвиге как и положено 0x7FFFFFFF
Удачной оптимизации :)
Деление - достаточно трудоемкая для процессора операция.
Деление на два = битовый сдвиг значения на бит вправо, при этом сами затраты - 1 такт.
Казалось-бы оптимизация.
Но что мы получим в случае -1 (0xFFFFFFFF)?
На делении, как и полагается - ноль, а на сдвиге как и положено 0x7FFFFFFF
Удачной оптимизации :)
SAR
ОтветитьУдалитьно:
1. компилятор и сам оптимизирует(а если "влево" - еще и через адресную арифметику)
2. а в глобальном масштабе - еще и тупоконечные платформы бывают...
а слона-то я и не заметил(0)
ОтветитьУдалитьобратил внимание только на знаковый бит.
Такой код (Y := X div 2) Delphi оптимизирует так:
ОтветитьУдалитьmov esi, eax
sar esi, 1
jns +3
adc esi, $00
procedure TForm1.FormCreate(Sender: TObject);
Удалитьvar
X, Y: integer;
begin
X := -1;
Y := X div 2;
Caption := IntToStr(Y);
end;