原文: https://www.javastudy.cloud/articles/2020/02/13/1581600004762.html
更多技術(shù)文章: 公眾號: java技術(shù)大本營
本文知識點
- Java 中用二進(jìn)制使用場景
- Java 中聲明二進(jìn)制數(shù)據(jù)
- Java 中拼接二進(jìn)制數(shù)據(jù)
二進(jìn)制的使用場景
做標(biāo)識用
二進(jìn)制就是只有 0 和 1 這兩個數(shù)。這和我們現(xiàn)實很多場景都類似, 如男/女,是/否,是否已讀等。那么對一個主體的描述, 我們可以有一個二進(jìn)制串來標(biāo)識一系列的 flag.
(小刀已改名為湊心,至于原因嘛, 因為現(xiàn)在在做一個小程序, 估計不久后會和大家見面),如有一個心,同時還有一個描述的二進(jìn)制串 1101. 第一個 1 代表男,第二個 1 代表矮。第三個 0 代表丑, 第三個 1 代表笨。 這樣我們只用 4 位就完成了這些信息的存儲。 4 位轉(zhuǎn)換成十進(jìn)制, 最大也就是 15. 用一個 byte 就可以存這么多信息。
聲明二進(jìn)制數(shù)據(jù)
大體上有三種方式:1,從 String 讀取。 2.從十進(jìn)制數(shù)轉(zhuǎn)。 3.直接聲明,代碼如下所示:
public class BinaryTools {
public static void main(String[] args) {
// 1.從String中讀取二進(jìn)制
String s = "1101";
Integer integer = Integer.valueOf(s, 2);
// 13
System.out.println(integer);
// 2.從 10 進(jìn)制數(shù)中讀取二進(jìn)制
int i1 = 520;
// 1000001000
System.out.println(Integer.toBinaryString(i1));
// 3.直接聲明二進(jìn)制
int i2 = 0b1101;
// 13
System.out.println(i2);
}
}
拼接二進(jìn)制數(shù)據(jù)
這里要用到位運算符。如 1001. 分別代表四個不同的屬性的狀態(tài)。 我們肯定是一個一個屬性得到的得到性別,要放到從右往左第四個位置上。 得到矮放到從右往左第三位。 依次往下。 代碼如下:
public static void main(String[] args) {
int i = 0b1;
int j = 0b1;
int k = 0b0;
int m = 0b1;
// 1000
int i1 = i << 3;
// 100
int j1 = j << 2;
// 0
int k1 = k << 1;
// 這里使用 | 或運算符
int cx = i1 | j1 | k1 | m;
// 1101
System.out.println(Integer.toBinaryString(cx));
}
拆分二進(jìn)制數(shù)據(jù)
這時候, 我們收到了"1101" 這個二進(jìn)制串, 這時候我們需要拆成四個單獨的標(biāo)識位,主要有兩種情況。1.拿到是一個字符串, 2. 拿到的是二進(jìn)制串。 代碼如下:
public static void main(String[] args) {
// 如果拿到的是String , 可以直接使用charAt來獲取
String s = "1101";
// 從左往右第二位
System.out.println(s.charAt(1));
// 如果拿到的是二進(jìn)制, 可以通過 右移后和 1 進(jìn)行與操作 &
int i = 0b1101;
// 從左往右第三位
int r = (i>>(3-1)) & 1;
System.out.println(Integer.toBinaryString(r));
}
總結(jié)
在平時工作中, 我們很少直接使用二進(jìn)制和位運算符,但和數(shù)字/標(biāo)識相關(guān)的業(yè)務(wù),如果能用上二進(jìn)制,定能為代碼增色不少! 加油!