回答
int fn(int i)
{
return i>>31;
}
int main(void)
{
int a=1, b=2;
if(fn(a-b))
{
printf("%d\n", a);
}
else
{
printf("%d\n", b);
}
return 0;
}
int max3(int x,int y)
{
unsigned int z=x-y;
z>>=31;
return *(&x+z);
}
C中不用关系运算符和比较运算符比较两个数的大小
答案:2 悬赏:60 手机版
解决时间 2021-04-03 15:33
- 提问者网友:浮克旳回音
- 2021-04-03 08:28
最佳答案
- 五星知识达人网友:逃夭
- 2021-04-03 09:42
你程序里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);
}
现在有另一种方法,该程序第一个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);
}
全部回答
- 1楼网友:十鸦
- 2021-04-03 10:50
想法不错。不过你是用c语言本身来判断,还是自己把优先级列在代码中。第二种,用switch把优先级高的放在前面就能实现了,依次输出123等。把输出量存放在a和b中,谁小谁优先级高。等优先级输出值相同就行了。
第一种比较有意义了,也比较复杂:算术运算符可以用公式得出的结果来判断以此类推,每个运算符都要有一个公式两个结果,运算符个数为n,需要n!个公式(数列不好。不知道算没算对)反正不少啊!而且还要考虑以后可能多几个运算符。程序可扩展性的问题。
真有此程序的话。我也求一个(利用语言本身判断优先级的)。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯