简单介绍一下java位运算

简单位运算介绍

或 |   只要有一个为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怎么解决的

 

上一篇:Boost boost_1_63_0安装 gcc4.8 & gcc5.4


下一篇:如何破解ppt文档