如何在C中没有算术运算符的情况下找到奇数/偶数?

时间:2016-05-11 14:09:01

标签: c

如何在不使用%/或按位运算符的情况下查找给定数字是奇数/偶数?

2 个答案:

答案 0 :(得分:2)

假设int是32位:

bool even(int x) {
    return !(((unsigned int)x)*0x80000000);
}

这可以通过移位除int的32位之外的最低有效位之外的所有位,因此在此之后,对于奇数,您有0x80000000或对于偶数,您有0。这被转换为bool并被否定。

正如Paul R在评论中指出的那样,便携式版本将使用INT_MIN代替0x80000000

答案 1 :(得分:1)

分裂只不过是重复减法:

bool even(int number) {
    // INT_MIN in 2's complement is always even
    if( number==INT_MIN )
        return true;
    else if( number<0 )
       number = -number;
    while( number>1 )
       number -= 2;
    return number==0;
}