使用位运算判断奇偶性

平时在做奇偶数判定时,往往采用对2取余看结果是0和1的方式来判断,现在提供一种通过位运算判断奇偶性的方法:

整数中,能被2整除的数是偶数,不能被2整除的数是奇数

整数不仅包括0和整数,而且也包括负整数,这种方式如果是根据取余结果来判断是否为0来判断偶数、奇数的话还是可以的,但是如果用1来判定的就糟了(因为负奇数对2取余结果为-1)。其实将整数用二进制表示后,可以很方便的进行奇偶性的判断,因为偶数,无论是正整数还是负整数,二进制表示时其最低位为0;奇数,无论是正整数还是负整数,二进制表示时其最低位都为1(二进制正负数表示参考),利用这一特性,可以非常方便快速的完成判断。
C语言代码

#include 

int isOdd(int n){
	return n & 1;
}
int main(int argc, char const *argv[])
{
	printf("%d\n", -8 % 2);
	for (int i = -10; i < 10; ++i)
	{
		if (isOdd(i))
		{
			printf("%d: %s\n", i, "奇数");
		}
		else {
			printf("%d: %s\n", i, "偶数");
		}
	}
	return 0;
}

Python代码

def is_odd(n):
	return True if n & 1 == 1 else False
for i in range(-10, 10):
	if is_odd(i):
		print("{} is odd".format(i))
	else:
		print("{} is even".format(i))

后记

理论上,位运算比对2取模要快,在看源码时也会经常发现这种用法,但实际操作时会发现两者其实效率差不多,这是因为编译器会将对2的指数的取模操作,优化成位运算操作,也就是说对于程序中的对2n的取模,编译器会将其自动优化,所以实际测试时感觉性能差不多!

你可能感兴趣的:(细节,编程细节,编程小技巧)