package my.study.util.collection;
/**
*-----------------------------------------------------------------
*------------------------位移运算符---------------------------------
*-----------------------------------------------------------------
* 直接操作二进制的运算符
*
* & “与” : 上下对应位都是1 , 结果才为1.
*
* | “或” : 上下对应位都是0, 结果才为0.
*
* ^ "异或" :上下对应为相同, 结果才为0.
*
* ~ ”非“ : 1变0, 0变1.
*
* >> ”右移运算符“ :
*
* << ”左移运算符“ :
*
* >>> ”按位右移补零操作符。“
*/
public class Operation {
public static void main(String[] args) {
/**
* 0000 0110 6
*
* 0000 1110 14
*/
int A = 6, B = 14;
int c = A & B;
/**
* 0000 0110
* & 0000 1110
* ----------------
* 0000 0110 6
*/
System.out.println("A&B:"+ c); //结果 6
int d = A | B ;
/**
* 0000 0110
* ^ 0000 1110
* ----------------
* 0000 1110 14
*/
System.out.println("A | B:"+ d); //结果 14
int e = A ^ B ;
/**
* 0000 0110
* ^ 0000 1110
* ----------------
* 0000 1000 8
*/
System.out.println("A ^ B:"+ e); //结果 8
/**
* 0000 0110
* 000110
*/
int a = A >> 2;
System.out.println("A>>2:"+a); //结果 1
a = A>>>2;
System.out.println("A>>>2:"+ a); //结果 1
/**
* 0000 0110 A
*
* 0001 1000 A<<2
*/
a = A << 2;
System.out.println("A << 2:"+a); // 24
/**
* ”>>>“ 和 ">>" 的区别
*/
int b = -1;
System.out.println(b>>2); //结果 -1
System.out.println(b>>>2); //结果 1073741823
/**
* 分析:
* int 的完整二进制表达式:
*
* 0000 0000 0000 0000 0000 0000 0000 0000 一个int 4个byte, 一个byte是8个bit位。
*
* 正反数转换原则: 正数取反加1, 为负数。
*
* 0000 0000 0000 0000 0000 0000 0000 0001 ----- 1
*
* 1111 1111 1111 1111 1111 1111 1111 1110 -------取反
* + 1
* ------------------------------------------------------
* 1111 1111 1111 1111 1111 1111 1111 1111 ------- -1, 这就是 ”-1“ 的二进制表达式
*
*
* b >> 2 : 按位右移2位,移动得到的空位 不做处理。
*
* 1111 1111 1111 1111 1111 1111 1111 1111 ----- -1
*
* 1111 1111 1111 1111 1111 1111 1111 1111 ----- 右移2位
* --------------------------------------------------------------
* 11 1111 1111 1111 1111 1111 1111 1111 ------结果还是-1,只不过最前面两位移走了,没有补位。
*
*
* b >>> 2: 按位右移2位,移动得到的空位以零填充。
*
* 1111 1111 1111 1111 1111 1111 1111 1111 ----- -1
*
* 001111 1111 1111 1111 1111 1111 1111 1111 ----- 右移2位,空位补0.
*
* -----------------------------------------------------------------------
* 0011 1111 1111 1111 1111 1111 1111 1111 -----结果就变成一个正数了。
*
*
*
*
*
*
*/
}
}
“>>>” 和 “>>” 的区别只在于移动操作后,出现的空位, “>>>”以0 填充,而 ">>" 不做处理。
【Java基础---位运算符】
猜你喜欢
转载自blog.csdn.net/qq_41694349/article/details/79270220
今日推荐
周排行