我們知道,計算機中的資料資訊都是以二進制0、1形式存在的,具體來說是以該資料的補碼形式,在位運算子中有:>>,<<, |,^,~,>>>,那么二進制資料與位運算子之間會有什么化學反應呢?下面先寫一個小demo
package com.basic.day02;
/*
* 測驗 & | ^ ~
* */
public class LogicTest2 {
public static void main(String[] args) {
int a = 4;
int b = 7;
System.out.println(a & b);//4
System.out.println(a >> 2);//1
System.out.println(a << 2);//16
System.out.println(16 >>> 3);//2
System.out.println(a | b);//7
System.out.println(a ^ b);//3
System.out.println(~ a);//-5
System.out.println(~ b);//-8
}
}
首先,我們將變數a,b換成2進制,然后按照0是false,1是true進行相應的計算,


&:按位與運算(0&1=0,1&0=0,0&0=0,1&1=1),
|:按位或運算(0|1=1,1|0=1,1|1=1,0|0=0)
>>:右移 (3>>1 == 3/2=1),即>>n,右移n次,就整除2的n次冪,符號位是0時,右移空缺補0;符號位是1時,右移空缺補1.
<<:左移(3<<2 == 3*2*2=12 ),即<<n,左移n次,就乘以2的n次冪,被移除的高位丟棄,空缺位補0.
>>>:無符號右移,空缺位補0.
^:按位異或(0^1=1,1^0=1,1^1=0,0^0=0),即不同才是true,相同才是false,
~:按位取反,各二進制按補位取反,先按位取反,得到一個負數,此時得到負數二進制的補碼,然后在此基礎上-1,得到反碼(符號位不變),最后按位取反,得到負數的原始碼(符號位不變),
本文來自博客園,作者:小孫不是程式員,轉載請注明原文鏈接:https://www.cnblogs.com/sunlincode/p/sun.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430184.html
標籤:Java
