a =-2147483648 - a; компиляторная оптимизация

Я пытаюсь изучить, как перепроектировать программное обеспечение и все приемы, чтобы понять, как код похож перед оптимизацией компилятора.

Я несколько раз находил что-то вроде этого:

    if (a < 0)
      a = -2147483648 - a;

Я первоначально думал, что это было abs(): потери значимости, таким образом, Вы получаете положительное значение. Но с тех пор a отрицательно (см. если), это эквивалентно:

    if (a < 0)
      a = -2147483648 + abs(a);

Который будет очень маленьким отрицательным числом а не абсолютным значением a вообще. Что я пропускаю?

6
задан Thomas Bonini 16 August 2010 в 20:03
поделиться