📜  使用位运算符计算C / C++中最多两个整数

📅  最后修改于: 2021-05-28 01:59:50             🧑  作者: Mango

给定两个整数AB ,任务是使用按位运算符查找两个数的最大值。

例子:

方法:想法是使用按位运算符和右移运算符来查找 不使用任何条件语句(if…)和三元运算符(?:)的情况下,两个不同数字之间的最大数。步骤如下:

  • 根据以下表达式找到最大值:
  • 减去两个数字并将其存储在另一个变量z中
  • 要获得减法后获得的数字的符号,请将Right Shift应用于变量z并将其存储在另一个变量i中,然后对变量i进行1的按位与运算,以得到10的值。
  • 执行以下表达式可获得两个给定数字中的最大值,即max =(a –(i * z))

插图:

下面是上述方法的实现:

C
// C program for the above approach
#include 
  
// Function to find the largest number
int findMax(int a, int b)
{
    int z, i, max;
  
    // Perform the subtraction
    z = a - b;
  
    // Right shift and Bitwise AND
    i = (z >> 31) & 1;
  
    // Find the maximum number
    max = a - (i * z);
  
    // Return the maximum value
    return max;
}
  
// Driver Code
int main()
{
    int A = 40, B = 54;
  
    // Function Call
    printf("%d", findMax(A, B));
  
    return 0;
}


C++
// C++ program for above approach
#include 
using namespace std;
  
// Function to find the largest number
int findMax(int a, int b)
{
    int z, i, max;
  
    // Perform the subtraction
    z = a - b;
  
    // Right shift and Bitwise AND
    i = (z >> 31) & 1;
  
    // Find the maximum number
    max = a - (i * z);
  
    // Return the maximum value
    return max;
}
  
// Driver Code
int main()
{
    int A = 40, B = 54;
  
    // Function Call
    cout << findMax(A, B);
  
    return 0;
}


输出:
54

时间复杂度: O(1)
辅助空间: O(1)