前端之家收集整理的这篇文章主要介绍了
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.
原文链接:https://www.f2er.com/c/110450.html