给定两个整数,在不使用if语句或选择(>=,>,和=)时,如何区分两个整数、最大值、最小值和相等值。我考虑过使用fmin
和fmax
,但我还需要知道如何知道这两个整数是否相同。
最佳答案
假设2的补码算法:
int intcmp(int int1, int int2)
{
int diff=int2-int1;
unsigned int udiff;
memcpy(&udiff, &diff, sizeof(diff));
if(!udiff)
return 0; /* the two integers are equal */
else if(udiff & 1<<(sizeof(udiff)*CHAR_BIT-1)) /* check the sign */
return +1; /* int1 < int2 */
else
return -1; /* int2 < int1 */
}