求较小的值,不能用比较运算符if-else ?: while for内嵌汇编递归第三方函数

来源:互联网 发布:汤姆大叔javascript 编辑:程序博客网 时间:2024/05/16 01:01

          这题目是刚看到的,其实这种题目没有什么实际意义,只是考察下面试者的思维能力而已。我一开始也没有想到什么好的方法。就学习了网友们的解法,本人主要是做下笔记,记忆不能永存...言归正传吧!

         下面是某网友的注释代码,非常感谢...学习了。

#include <stdio.h>#include <stdlib.h>#include <string.h>int MIN(int a, int b){int sum = a + b;//先算两者的和b = a - b;//如果a > b,那么得到b=a-b是正值,那么下一行(b>>(sizeof(int)*8 - 1))将等于0,否则为-1//如果a > b,根据上面的解释,那么(b>>(sizeof(int)*8 - 1))将等于0,那么该语句可简化为a+=b*0(b为a和b的差值),因此得到a就是较大值//如果a < b,根据上面的解释,那么(b>>(sizeof(int)*8 - 1))将等于-1,那么该语句可简化为a+=b*(-1)(b为a和b的差值),因此得到a就是较大值;a += b * (b >> sizeof(int) * 8 - 1);// b * (b >> 32 - 1) -------------return sum - a;//用和减去较大值,得到较小值}// 测试代码int main(void){    int a = 3;    int b = 156;    printf("The smaller one of %d and %d is %d\n", a, b, MinTow(a, b));    return 0;}



原创粉丝点击