Я пытаюсь узнать, как перепроектировать программное обеспечение и все хитрости, чтобы понять, как выглядит код до оптимизации компилятора.
Я обнаружил что-то подобное несколько раз:
if (a < 0)
a = -2147483648 - a;
Первоначально я думал, что это abs()
: недостаток, так что вы получите положительное значение.Но поскольку a
является отрицательным (см. If), это эквивалентно:
if (a < 0)
a = -2147483648 + abs(a);
Это будет очень маленькое отрицательное число, а не абсолютное значение a
вообще.Чего мне не хватает?