给定两个整数A和B ,任务是使用按位运算符查找两个数的最大值。
例子:
Input: A = 40, B = 54
Output: 54
Input: A = -1, B = -10
Output: -1
方法:想法是使用按位运算符和右移运算符来查找 不使用任何条件语句(if…)和三元运算符(?:)的情况下,两个不同数字之间的最大数。步骤如下:
- 根据以下表达式找到最大值:
z = A – B
i = (z >> 31) & 1
max = a – (i*z)
- 减去两个数字并将其存储在另一个变量z中。
- 要获得减法后获得的数字的符号,请将Right Shift应用于变量z并将其存储在另一个变量i中,然后对变量i进行1的按位与运算,以得到1或0的值。
- 执行以下表达式可获得两个给定数字中的最大值,即max =(a –(i * z)) 。
插图:
A = 40, B = 54
z = (A – B) = 40 – 54 = -14
i = -1 & 1 = 1
max = a – (i * z) = (40 – (1 * -14)) = 54
下面是上述方法的实现:
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)