不用做任何比較判斷運算子找出兩個整數中的較大的值

瘋人張發表於2020-10-14
不用做任何比較判斷運算子找出兩個整數中的較大的值

題目描述

給定兩個32位整數a和b,返回a和b中較大的,要求不能用任何比較判斷運算子。

輸入描述:

輸入兩個整數a和b,a和b均為32位整數。

輸出描述:

輸出一個整數,兩個數中較大的那一個。

示例1
輸入
1 0
輸出
1

題解:

兩個數字中找到較大的一個,不用比較運算,那麼考慮它們的差:假設 c = a - b,其符號位為 sc = ( c >> 31 ) & 1若 c 為正,sc 為 0 ;若 c 為負,sc 為 1 ,那麼我們可以使用式子:a - c * sc 表示最終的結果。

程式碼:
#include <cstdio>

using namespace std;

int main(void) {
    int a, b;
    scanf("%d%d", &a, &b);
    int c = (( a-b ) >> 31) & 1;
    return 0 * printf( "%d\n", a-(a-b)*c );
}

相關文章