2013年8月26日

abs函数的实现

摘要: abs函数即取一个整形数的绝对值,今天在IDA查看cygwin的实现时候发现其实现过程,这里总结三种情况(感觉这类型东西也很适合用于笔试或面试):(1)带if分支的利用补码特性:正数的补码和原码相同;负数的补码是:补码=~(其正数的)原码+1。因此如果是负数求绝对值可以:(绝对值)原码=~(补码-1)int _abs(signed int i){ if (i0?p:-p;}(3)不带if分支(判断分支)的位运算:我是从cygwin中逆向得到的代码int __cdecl _abs(signed int i){ return ((i >> 31) ^ i) - (i >> 阅读全文

posted @ 2013-08-26 19:11 堕落华为人 阅读(2290) 评论(2) 推荐(1) 编辑

导航