This program is to find max and min of a given two numbers.
Logic:
result = b ^ ((a ^ b) & -(a < b)); // min(a, b)
In above expression,if a < b, then -( a < b) become -1, so it behave like below expression
result = b ^ ((a ^ b) & ~0);
result = b ^ a ^ b; // b^b is zero
result = a ^ 0; // oring with 0 does not effect
result = a; //minimum number
result = a ^ ((a ^ b) & -(a < b)); // max(a, b) In above expression, if a > b, then -( a > b) become 0, so it behave like below expression
result = a ^ ((a ^ b) & -(0));
result = a ^ 0; // ORing with 0 does not effect
result = a; //Maximum number
Implementation
#include <stdio.h>
#define MAX(num1, num2) ( num1 ^ ((num1 ^ num2) & -(num1 < num2)))
#define MIN(num1, num2) ( num2 ^ ((num1 ^ num2) & -(num1 < num2)))
int main()
{
int num1,num2;
printf("\n Enter the number: ");
scanf("%d", &num1);
printf("\n Enter the number: ");
scanf("%d", &num2);
printf("\n The maximum is: %d\n", MAX(num1, num2));
printf("\n The minimum is: %d\n", MIN(num1, num2));
return 0;
}
Output:
Enter the number: 10
Enter the number: 18
The maximum is: 18
The minimum is: 10
Categories: Data Structure and Algorithm
Leave a Reply