~x & 1
首先对所有位取反~x, 结果再&1只剩下最后一位取反的值。
是否有点不对啊?
明白了,这样可以简化为((x>>1)<<1)|(~x & 1), 前面部分可以用x&0xfffffffe替换,只是0xfffffffe有点让人不舒服,而且碰到长整数就不对了. 有没有更简单的?
@走在溪边: 哪里不对?你说的“整数最后一位取反”,是什么意思?比如这个整数是15,那么你要求的是对5取反,还是对15这个数的2进制(也就是1111)的最后一位取反?
@水牛刀刀: 不好意思,我没说清楚,我的本意是把一个整数的最后一位取反,其他位保持不变。
@走在溪边: (x & ~1) + (~x & 1)
@水牛刀刀: 很漂亮的式子, 谢谢了.
x ^ 1 竟然这样就可以了, 晕.
xor 有以下性质: x^0 = x , x^~0 = ~x
@走在溪边: 仔细想了下,确实是这样的。我知道xor操作符,但是没意识到可以这样妙用!