a = -2147483648 – a;编译器优化

前端之家收集整理的这篇文章主要介绍了a = -2147483648 – a;编译器优化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试学习如何逆向工程软件和所有技巧,以便在编译器优化之前了解代码的样子.

我发现了几次这样的事情:

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

我原本以为这是一个abs():一个下溢,所以你得到正值.但由于a是负数(见if),这相当于:

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

这将是一个非常小的负数,而不是a的绝对值.我错过了什么?

解决方法

它正在转换数字,使位31成为符号位,其余位(0 … 30)表示绝对幅度.例如如果a = -5,那么在操作之后它变为0x80000005.

猜你在找的C&C++相关文章