前两天翻译了一篇文章,如何找到数组里面的唯一数字 – 码中人 ,发现按位运算可以做很多事,包括可以很便捷的判断数的奇偶。
- 原文:https://www.geeksforgeeks.org/check-if-a-number-is-odd-or-even-using-bitwise-operators/
- 翻译:码中人
给定一个数 N,使用位运算符检查该数是偶数还是奇数。如:
输入: N = 11 输出: Odd(奇数) 输入: N = 14 输出: Even (偶数)
方法1:按位异或
按位异或是指参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0
这个方法是用二进制数0001对数字的二进制最后一位进行处理。如果数字是偶数,数字异或之后操作会增加1,否则,数值会减少1。
所以代码如下:
看看结果 :
纳尼?怎么回事。
这里涉及运算符的优先级问题,因为相等运算符(==)的优先级比按位异或(^)要高。所以:
n ^ 1 == n + 1
相当于:
n^(1 == n+1)
即:
11为整数,为真。所以会出现11为偶数的错误。
应用分组修改优先级,正确应为:
方法2:按位与
按位与操作符用和号( &)表示,有两个操作数。本质上,按位与就是将两个数的每一个位对齐,然后基于真值表中的规则,对每一位执行相应的与操作。
规则为:1&1=1,1&0=0,0&1=0,0&0=0。
所以将数字与1相与,如果结果为1,即为奇数。如果为0,即为偶数。
方法3:按位或
按位或操作符用管道符( |)表示,规则为:1|1=1,1|0=1, 0|1=1 ,0|0=0。
同样将数值与1相或,得到的值如查比原来的数要大,即为偶数。数值不变即为奇数。
(完)