关于位运算的奇技淫巧
最近看了一些关于位运算的题目,受益匪浅,觉得位操作符真心强大,无懈可击!特此总结一下,感谢那些公众号(苦逼的码农_帅地)与广大博主! 1. 判断奇偶性 一般操作是: 1 if( n % 2) == 1{ 2 // n 是个奇数 3 } 但是!!!运用位操作符,发现,只需要判断最后一位上是否是1就行了(想想8421码的构成),只有当最后一位是1时,那么该数就是奇数,非1(也就是0)时,是偶数。如下: 1 if(n & 1 == 1){ 2 // n 是个奇数。 3 } 虽然形式基本一样,虽然我们写成 n % 2 的形式,编译器也会自动帮我们优化成位运算,但是!!!如果是你自己写出来,你自己难道不觉得自己很牛逼吗?是不是感觉逼格一下就上去了?【特此声明:别人看不懂,挨打别怪我】除此外,时间效率也快很多。 2. 交换两个数 一般操作是,借助一个中间变量: 1 int tmp = x; 2 x = y; 3 y = tmp; 但是!!!万一哪天有人抽风了要为难你, 不允许你使用额外的辅助变量来完成交换呢? 你还别说,有人面试确实被问过,这个时候,位运算大法就来了。代码如下: 1 x = x ^ y // (1) 2 y = x ^ y // (2) 3 x = x ^ y // (3) 运用异或运算,异或运算性质是:相同位为0,不同位为1。故自己和自己异或,肯定是0啊,如:x^x=0,