加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:44:41 所属栏目:百科 来源:网络整理
导读:我正在尝试学习如何逆向工程软件和所有技巧,以便在编译器优化之前了解代码的样子. 我发现了几次这样的事情: if (a 0) a = -2147483648 - a; 我原本以为这是一个abs():一个下溢,所以你得到正值.但由于a是负数(见if),这相当于: if (a 0) a = -2147483648 +
我正在尝试学习如何逆向工程软件和所有技巧,以便在编译器优化之前了解代码的样子.

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

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

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

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

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读