不使用显示的比较语句比较两个数的大小

文章通过C#代码展示了如何在不使用显式比较语句的情况下进行比较操作。方法一利用Math.Sign函数确定数字的相对大小,方法二则能直接区分出较大和较小的数值。文章提出了这些方法可能应用于排序的思路,并表示可能需要结合递归等技术进一步探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示的比较语句,例如 IF 语句, 或者是3目运算符(其实这个里面包含有判断语句,是比较语句的另一种形式)

我们考虑使用 符号函数。符号函数里面可能有比较语句,也可能没有,这个学过计算机原理的同学大约可以体会出来。在基本的逻辑电路中,是有比较电路的,如果符号函数直接编译成比较电路的机器码,那么这里面就没有使用显示的比较语句。不管它了,反正,代码里没有就可以了。

C# 代码如下:
方法一:

        int[]  x = new int[] { 100, 100 };
            int [] rslt = new int[2] ;
            char[] ch = new char[] { '<', '=', '>' };
            int symbol = Math.Sign(x[0] - x[1])+1;
            var result = string.Format("{0}{1}{2}", x[0], ch[symbol], x[1]);
            txt_resutl.Text = result;

上述方法实际结果是不知道大小的,但是人可以看得到,符合题目要求;
方法二:

           int[]  x = new int[] { 100, 100 };
            int [] rslt = new int[2] ;
          
            var big  = x[(1 - Math.Sign(x[0] - x[1])) / 2];
            var small = x[(1 - Math.Sign(x[1] - x[0])) / 2];
             var result = string.Format("big = {0}, small = {1}", big,small);
            txt_resutl.Text =  result;

方法二是知道大小的。

延伸问题: 能否利用上面的思路排序呢?

感觉可以,加上递归等等,再议。

MaraSun BJFWDQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值