java位运算

java位运算

  • 进制转换
    • 二进制转十进制
    • 二进制转8进制
    • 二进制转16进制
    • 十进制转二进制
    • 8进制转二进制
    • 16进制转二进制
    • 十进制转8进制、16进制
    • 8进制、16进制转十进制
  • 移位运算符
      • 左移运算符 <<
      • 右移运算符 >>
      • 无符号右移 >>>
  • 按位与、或、非,异或等运算方法
    • 按位与运算符(&)
    • 按位或运算符(|)
    • 非运算符(~)
    • 异或运算符(^)

进制转换

进制转换:https://jingyan.baidu.com/article/495ba84109665338b30ede98.html

二进制转十进制

java位运算_第1张图片

二进制转8进制

java位运算_第2张图片

二进制转16进制

java位运算_第3张图片

十进制转二进制

方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止
java位运算_第4张图片

8进制转二进制

java位运算_第5张图片

16进制转二进制

java位运算_第6张图片

十进制转8进制、16进制

java位运算_第7张图片

8进制、16进制转十进制

java位运算_第8张图片

移位运算符

注:以下num均为正整数

左移运算符 <<

num << n, 二进制左移n位,低位用0补齐

  1. num<<1相当于 num*2
# 3的二进制为0011
# 3<<1 = 6,6的二进制为0110
System.out.println(Integer.toBinaryString(3)); // 0011
System.out.println(Integer.toBinaryString(3<<1)+" -> "+(3<<1)); // 0110 -> 6

右移运算符 >>

num>>n,二进制右移n位,去掉低位n位

  1. num>>1,相当于num/2,整数为num/2,奇数为(num-1)/2
# 5的二进制为0101
# 5>>1 = 2,2的二进制为0010
System.out.println(Integer.toBinaryString(5)); // 0101
System.out.println(Integer.toBinaryString(5>>1)+" -> "+(5>>1)); // 0010 -> 2

无符号右移 >>>

无符号右移,忽略符号位,空位都以0补齐

  • 正数与右移动>>类似
  • 负数请查阅https://www.jb51.net/article/34133.htm**https://www.jb51.net/article/34133.htm

按位与、或、非,异或等运算方法

按位与运算符(&)

参加运算的两个数据,按照二进制位进行与运算。
运算规则:0&0=0,0&1=0,1&0=0,1&1=1
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。
与运算”的特殊用途:

  1. 清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
  2. 取一个数中指定位
    方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
    例:设X=10101110,
    取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;
    还可用来取X的2、4、6位。

按位或运算符(|)

参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :参加运算的两个对象只要有一个为1,其值为1。
例如: 3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7
另,负数按补码形式参加按位或运算。
“或运算”特殊作用:

  1. 常用来对一个数据的某些位置1。
    方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。
    例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

非运算符(~)

参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0; ~0=1;
即:对一个二进制数按位取反,即将0变1,1变0。

  1. 使一个数的最低位为零,可以表示为:num&~1。
    ~1的值为1111111111111110,再按“与”运算,最低位一定为0

异或运算符(^)

0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0; 0 ^ 0 = 0;
即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3|5 即 0000 0011 ^ 0000 0101 =0000 0110 因此,3^5的值得6;

  1. 交换两个值
int a = 3, b = 5;
a ^= b;
b ^= a;
a ^= b;
// 结果 a = 5, b = 3;

你可能感兴趣的:(小知识,java)