如何在不使用%
,/
或按位运算符的情况下查找给定数字是奇数/偶数?
答案 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;
}