简单位运算介绍
或 | 只要有一个为1,结果就为1。
与 & 两位全为1,结果才为1
非 ~ 对一个二进制数按位取反,即将0变为1,1变0
异或 ^ 两个相应位为“异”(值不同),则该位结果为1,否则为0
异或特殊用法
(1) 与1相异或,使特定位翻转
方法:找一个数,对应X要翻转的位,该数的对应为1,其余位为零,此数与X对应位异或即可。
例如:X=1010 1110,使X低四位翻转,用X^0000 1111=1010 0001即可得到。
(2) 与0相异或,保留原值
位运算应用-变量交换
普通的变量交换方法需要借助第三个变量
如果采用异或则不需要借助第三个变量就可以使交换 code:
System.out.println("--------2.面试问到的异或计算法---------"); System.out.println("原理:a^b^a = a "); int a2 = 1; int b2 = 2; a2 = a2^b2; b2 = a2^b2;//b2 = a2^b2^b2 = a2 a2 = a2^b2;//a2 = a2^b2^b2 = b2 System.out.println("交换后: a2 = "+a2); System.out.println("交换后: b2 = "+b2);
原理
1. ^是异或运算符,异或的规则是转换成二进制比较,相同为0,不同为1. 2. a^b^a = b
位运算应用
LeetCode
参考LeetCode只出现一次的数字:
136题 https://leetcode-cn.com/problems/single-number-iii/
260题 https://leetcode-cn.com/problems/single-number-iii/
计算机精度的问题
double和float为什么会精度丢失
BigDecimal怎么解决的