第十四届蓝桥杯集训——JavaC组第九篇——位运算符
这个稍微难度大一些,基础的有【&与、|或、^异或、<<左位移、>>右位移】。
我们一个一个的来看。
首先,我们学会了二进制是什么,那么我们这个二进制的核心就是二进制。
值交换
两个变量,一个x值是5,另外一个y值是7,我们需要通过自己的方式将x重新赋值成7,而y赋值成5;
package com.item.action; public class demo1 { public static void main(String[] args) { // TODO Auto-generated method stub int x=5; int y=7; int c=0; c=x; x=y; y=c; System.out.println("x:"+x); System.out.println("y:"+y); } }
这个案例我们通过第三方的变量进行交换至。
异或逻辑
异或结果
A | 符号 | B | = | result |
Flase0 | ^ | Flase0 | = | False0 |
Flase0 | ^ | True1 | = | True1 |
True1 | ^ | Flase0 | = | True1 |
True1 | ^ | True1 | = | False0 |
异或值交换
但是我们还有更先进的方法,我们来通过异或符号来交换一遍:
package com.item.action; public class demo1 { public static void main(String[] args) { // TODO Auto-generated method stub int x = 5; // 二进制:101 int y = 7; // 二进制:111 x=x^y; y=x^y; x=x^y; System.out.println("x:"+x); System.out.println("y:"+y); } }
结果:
x:7
y:5
拆分过程我们来看看:
int x = 5; // 二进制:101
int y = 7; // 二进制:111
x=x^y;//101^111=010=2
y=x^y;//010^111=101=5
x=x^y;//010^101=111=7
其它位移符号:
下面我们来看一下其它的位移符号:
int x = 5; // 二进制:101
int y = 7; // 二进制:111
System.out.println(x & y); // 101 & 111 = 101 = 5(十进制)
System.out.println(x | y); // 101 | 111 = 111 = 7(十进制)
System.out.println(x ^ y); // 101 ^ 111 = 010 = 2(十进制)
System.out.println(x << 1); // 101 << 1 = 1010 = 10(十进制)
System.out.println(x >> 1); // 101 >> 1 = 010 = 2(十进制)