给定两个整数,在不使用if语句或选择(>=,>,和=)时,如何区分两个整数、最大值、最小值和相等值。我考虑过使用fminfmax,但我还需要知道如何知道这两个整数是否相同。

最佳答案

假设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 */
}

10-06 05:05