patterncMinor
Comparing two integers without logical, relational or bitwise operators
Viewed 0 times
withoutcomparingrelationaloperatorstwobitwiseintegerslogical
Problem
I answered a question on SO today, however it did't receive any up-votes, so I want to know what's wrong with my code.
The requirement is to compare the input numbers(granted to be positive) without logical, relational or bitwise operators, and insert the corresponding comparison sign between them. For example:
Here is my posted code:
That OP wants to know how to insert a comparison sign(`
See: https://stackoverflow.com/q/35532123/5399734 for the original question.
The requirement is to compare the input numbers(granted to be positive) without logical, relational or bitwise operators, and insert the corresponding comparison sign between them. For example:
input: 4 6
output: 4 2
input: 2 2
output: 2 = 2Here is my posted code:
#include
int main(void)
{
unsigned a, b;
scanf("%u %u", &a, &b);
printf("%u ", a);
char relationship[] = {''};
putchar(relationship[!!(a/b) - !!(b/a) + 1]);
printf(" %u", b);
return 0;
}That OP wants to know how to insert a comparison sign(`
, =`) between the two numbers. But my emphasis is on how to determine the relationship of the two numbers.See: https://stackoverflow.com/q/35532123/5399734 for the original question.
Solution
That seems a fine solution. Some minor suggestions:
Something like this:
- Instead of spelling out
relationshipas{''}, you could use simply""
- Instead of printing
a, the relation andbin separate statements, it will be more readable to print in a singleprintf
- The expression
!!(a/b) - !!(b/a)evaluates to -1, 0, 1, commonly returned by acmpfunction. If you give the expression a name by putting it in a variable, that will ring a bell with many readers and make it easier to understand.
Something like this:
unsigned a, b;
scanf("%u %u", &a, &b);
int cmp = !!(a/b) - !!(b/a);
char relation = ""[cmp + 1];
printf("%u %c %u\n", a, relation, b);Code Snippets
unsigned a, b;
scanf("%u %u", &a, &b);
int cmp = !!(a/b) - !!(b/a);
char relation = "<=>"[cmp + 1];
printf("%u %c %u\n", a, relation, b);Context
StackExchange Code Review Q#120685, answer score: 3
Revisions (0)
No revisions yet.