1.bitXor:要求限用运算符实现异或,实际上我们知道逻辑异或可以只用与或非三类运算组合实现,因此很容易得到a^b=((a&b)|(a&b)),但是题目没让我们使用或运算符,根据摩根定理我们可以得到:(a&b)=a|b,带入即可得到答案。
2.tmin:返回int的最小值,int属于有符号数,负数存储以补码形式,因此我们很容易得到-2147483648的补码就是0x80000000,拆成二进制就是1后面31个0,我们通过对1移位运算得到是1<<31
3.Tmax:判断x是否为int的最大值,判断一个数是否为一个数的运算我们很容易想到异或,异或值为0当且仅当两个数相等时得到。最大值可以通过移位取反(1<<31)得到0x7fffffff,那么判断就容易多了。!(x^((1<<31))
-
allOddBits:判断二进制奇数位上是否全为1,我们可以先把偶数位的所有数置0,奇数位不变,置0,不变,很容易想得到&运算,那么在把偶数位全部置0之后结果肯定=0xAAAAAAAA的,不等则返回0,那还是异或运算。!((x&0xAAAAAAAA)^0xAAAAAAAA)
-
negate:取负运算很简单,~x+1
-
isAsciiDigit:判断x是否在0x30~0x39之间,并且这里允许用+运算符,众所周知,有+就可以实现减法运算,我们只要把x-0x30之后看看它是否为正且x-0x3