|
|

楼主 |
发表于 2006-9-9 11:45:26
|
显示全部楼层
总结一下:
1、不要盲目用减法,因为异号整数相减容易溢出; 确保两数是同号后则可以用减法。
2、负整数右移 ( sizeof(int)*8-1 ) 后,得到的是 -1 而不是 1, 因为负整数右移是算术右移SAR。
3、注意移位运算的优先级比加减法低。
4、不要直接用31, 因为有些系统的int不是32位的。
5、 楼下补充:)
biinn兄的这个解比较好- int comp_int(int var1, int var2)
- /* return value < 0: means var1 < var2;
- * = 0: means var1 = var2;
- * > 0: means var1 > var2;
- */
- {
- int bit_width, msb, rtnvar;
- bit_width = sizeof(int) << 3;
- msb =( var1 >> (bit_width -1) ) - ( var2 >> (bit_width -1) ) ;
- if (msb)
- rtnvar = msb;
- else
- rtnvar = var1 - var2;
- return rtnvar;
- }
复制代码 |
|