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(
xS_OP*ɖvA 5|i,MfG@!)mC7O f~{{˓_aPP%i9ιhueP wZ5?7Ti5[6b-VڹS6,AU"gEi K4ƲDCkQ9ni ^ŠE X`\iw C&(fei &.z*LQGqw"_ci`D6L;#&옉8wellrj7a.nk:sy@f]{5)&BAxٹ>X/#Ό+"^?A}QTy(mOt3h_c@磥 k$@BܨlZ>1l4P)ن,KH^tO&T/p7+^?VyF`?xc.-yܫA{^5Hqy + jT y8+:PQU? В,z+Ͳ%հ֒.{Si\e ~*qǕ|a;YI/_=~k)ʚK 1iEas@,K 

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);
}