Skip to content

Instantly share code, notes, and snippets.

@jmagnuson
Created April 14, 2014 14:56
Show Gist options
  • Save jmagnuson/10655552 to your computer and use it in GitHub Desktop.
Save jmagnuson/10655552 to your computer and use it in GitHub Desktop.
Finds maximum/minimum value between two signed integers without the use of conditionals
#include <stdlib.h>
#include <stdio.h>
#define INT_SHIFT ( (sizeof(int) - 1) * 4 )
int max_val( int a, int b )
{
int *val_ptrs[2] = {&a, &b};
int difference_bit = ( ( *val_ptrs[0] - *val_ptrs[1] ) &
(const int)( 8 << INT_SHIFT )
) >> (const int)( 3 + INT_SHIFT );
return *val_ptrs[difference_bit];
}
int min_val( int a, int b )
{
int *val_ptrs[2] = {&a, &b};
int difference_bit = ( ( *val_ptrs[1] - *val_ptrs[0] ) &
(const int)( 8 << INT_SHIFT )
) >> (const int)( 3 + INT_SHIFT );
return *val_ptrs[difference_bit];
}
int main(int argc, char *argv[])
{
int a=0, b=0;
a = atoi( argv[1] );
b = atoi( argv[2] );
printf("%d\n", max_val( a, b ) );
printf("%d\n", min_val( a, b ) );
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment