如何在不使用判断、函数等方法的情况下,输入两个整数,用bool比较两个整数的大小,并打印出结果?

问题描述:

我是C/C++初学者,刚入门学的知识很少。学到教学课堂有这么一题,就是用初学的知识来比较两个整数a,b的大小。提示有用除法和bool。0*任何数为0,1*任何数为1. 考虑到如果a大于b的话int a除以int b结果为1反之为0.但是我初学想了好久还是不明白不用判断怎么去构筑这个程序。“输入两个整数,并显示大的数和小的数的值”。求求各位大佬指点下萌新!感激不尽(在C/C++控制台上的)。教学的老师说让自己思考,不可能说答案的。我实在不明白怎么做,十分难受,求解

#include <stdio.h>

int main()
{
int a;
int b;
scanf("%d%d", &a, &b);
char * ch = "><=";  
int result = (((unsigned)(a - b)) / (1 << 31)) + (int)(a == b) * 2;
printf("%c\n", ch[result]);
return 0;
}

或者

int a;
int b;
scanf("%d%d", &a, &b);
char * ch = "><=";  
int result = ((a / b) == 0) + (int)(a == b) * 2;
printf("%c\n", ch[result]);

下面是不用指针不用==的方法(scanf的指针另当别论,你也可以换成cin)

int a;
int b;
scanf("%d%d", &a, &b);
char ch[] = "=><";  
int result = (((unsigned)(a - b)) / (1 << 31)) + (((unsigned)(a - b - 0)) / (1 << 31)) + (((unsigned)(0 - a + b)) / (1 << 31)) ;
printf("%c\n", ch[result]);

问题解决的话,请点下采纳。

如果a>=b 那么 a/b >=1 也就是 (bool)(a/b) == !false
如果a<b 那么 a/b <1 也就是 (bool)(a/b) == false

另外考虑下b为0的情况

回复heitu2019: 我已经说了最关键的, 后面的稍微构造下, 论坛评论出问题了, 没法用

    int     a,b,mx,mn;

    a = 5;
    b = 10;
    mx=(int)(bool)(a/b)*a+(int)(bool)(b/a)*b;
    mn=(int)(bool)(b/a)*a+(int)(bool)(a/b)*b;