不用任何比较判断找出两个数中较大的数
生活随笔
收集整理的這篇文章主要介紹了
不用任何比较判断找出两个数中较大的数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
給定兩個32位整數a和b,返回a和b中較大的
要求:
不能做任何比較
第一種方法。得到a-b的值的符號,就可以知道是返回a還是返回b。
public int flip(int n){return n ^ 1;}public int sign(int n){return flip((n>>31) & 1); }public int getMax1(int a,int b):int c = a - b;int scA = sign(c);int scB = flip(scA);return a*scA + b*scB其中sign函數的功能是返回整數n的符號,正數和0則返回1,負數返回0(在二進制表達中符號位0表示正,1表示負,注意不要搞混)。flip函數的功能是:如果n為0返回1,如果n為1返回0.
方法二。在方法一中存在一定的局限性,那就是如果a - b的值發生溢出,返回的結果就會不正確。方法二能很好的解決這個 問題,首先看如下的代碼
?
解釋說明:
如果a和b的符號不同(difSab = 1, sameSab = 0),則有:
如果a為0或正,那么b為負(sa = 1, sb = 0),應該返回a
如果b為0或正,那么a為負(sb = 1, sa = 0),應該返回b
如果a和b的符號相同(difSab = 0, sameSab = 0),此時一定不會發生溢出:
如果a - b為0或者為正(sc = 1),返回a
如果a - b為負(sc = 0 ),返回b
?
總結
以上是生活随笔為你收集整理的不用任何比较判断找出两个数中较大的数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不用额外变量交换两个整数的值
- 下一篇: 特征工程-统计数据特征