C中不用关系运算符和比较运算符比较两个数的大小回答int fn(int i){\x05return i>>31;}int main(void){\x05int a=1,b=2;\x05if(fn(a-b))\x05{\x05\x05printf("%d\n",a);\x05}\x05else\x05{\x05\x05printf("%d\n",b);\x05}\x05return 0;}int max
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/27 00:47:16
![C中不用关系运算符和比较运算符比较两个数的大小回答int fn(int i){\x05return i>>31;}int main(void){\x05int a=1,b=2;\x05if(fn(a-b))\x05{\x05\x05printf(](/uploads/image/z/14321974-22-4.jpg?t=C%E4%B8%AD%E4%B8%8D%E7%94%A8%E5%85%B3%E7%B3%BB%E8%BF%90%E7%AE%97%E7%AC%A6%E5%92%8C%E6%AF%94%E8%BE%83%E8%BF%90%E7%AE%97%E7%AC%A6%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%9A%84%E5%A4%A7%E5%B0%8F%E5%9B%9E%E7%AD%94int+fn%28int+i%29%7B%5Cx05return+i%3E%3E31%3B%7Dint+main%28void%29%7B%5Cx05int+a%3D1%2Cb%3D2%3B%5Cx05if%28fn%28a-b%29%29%5Cx05%7B%5Cx05%5Cx05printf%28%22%25d%5Cn%22%2Ca%29%3B%5Cx05%7D%5Cx05else%5Cx05%7B%5Cx05%5Cx05printf%28%22%25d%5Cn%22%2Cb%29%3B%5Cx05%7D%5Cx05return+0%3B%7Dint+max)
C中不用关系运算符和比较运算符比较两个数的大小回答int fn(int i){\x05return i>>31;}int main(void){\x05int a=1,b=2;\x05if(fn(a-b))\x05{\x05\x05printf("%d\n",a);\x05}\x05else\x05{\x05\x05printf("%d\n",b);\x05}\x05return 0;}int max
C中不用关系运算符和比较运算符比较两个数的大小
回答
int fn(int i)
{
\x05return i>>31;
}
int main(void)
{
\x05int a=1,b=2;
\x05if(fn(a-b))
\x05{
\x05\x05printf("%d\n",a);
\x05}
\x05else
\x05{
\x05\x05printf("%d\n",b);
\x05}
\x05return 0;
}
int max3(int x,int y)
{
\x05unsigned int z=x-y;
\x05z>>=31;
\x05return *(&x+z);
}
C中不用关系运算符和比较运算符比较两个数的大小回答int fn(int i){\x05return i>>31;}int main(void){\x05int a=1,b=2;\x05if(fn(a-b))\x05{\x05\x05printf("%d\n",a);\x05}\x05else\x05{\x05\x05printf("%d\n",b);\x05}\x05return 0;}int max
你程序里if(fn(a-b))实际上是if(!fn(a-b)==0),仍然使用了比较,而且只要使用if语句,对应的汇编代码就是cmp--比较. fn(a-b)函数的功能是判断两数之差的正负号,达到比较的目的.
现在有另一种方法,该程序第一个printf直接计算出大数99,第二个printf直接计算出小数50:
是不是非常简单呢?
int main(void)
{
int a=50,b=99;
printf("%d\n",(a+b+abs(a-b))/2);
printf("%d\n",(a+b-abs(a-b))/2);
}