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-0x3A是否为负就可以判断x在不在所在区间了,取负运算在上面已经有了,那么得到两个值怎么判断它的符号,那么就把1<<31对它进行&运算就可以得到0x800000000或者是0,一正一负异或得到1,若不在区间内则异或得到0,反正我觉得应该是不会有x-0x39为负,x-0x30为正的情况把,我是没有想到qwq,如果有,那就用&就不需要用异或了
return (!((x+(0x30+1))&(1<<31))&!!((x

本文通过位运算实现各种操作,如异或、取最小值、取最大值、奇数位判断、取负、ASCII字符判断等。利用摩根定理、补码和位移等知识,巧妙地运用位运算完成各种逻辑。例如,isAsciiDigit通过位运算判断字符是否为ASCII数字,negate通过取反加1实现取负操作。
最低0.47元/天 解锁文章
931

被折叠的 条评论
为什么被折叠?



