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.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |