1. 程式人生 > >java程式設計的邏輯讀書筆記——第二章

java程式設計的邏輯讀書筆記——第二章

1.整數的二進位制表示

1)原碼:可以直接通過計算得出的最直觀的形式。
2)補碼:原碼取反加1。對負數的補碼錶示做補碼運算就可以得到器對應正數的原始碼。
3)負數的表示就是對應的正數的補碼。
4)計算機其實只能做加法運算,用負數的補碼形式進行運算。

2.十六進位制

1)將4個二進位制位簡化位一個0~15的數,10~15用字元A~F表示,這種方法稱為十六進位制。
2)十六進位制表示,在前面加0x
3)二進位制的常量表示,在前面加0b或者0B
4)檢視整數的二進位制方法和十六進位制方法
	Integer.toBinaryString(a);
	Integer.toHexString(a);		//返回一個字串

3.位運算

1)左移:<<  右邊的低位補0,高位就捨棄了,相當於十進位制乘以2
2)無符號右移:>>>  向右移動,右邊的捨棄,左邊補0
3)有符號右移:>>   向右移動,右邊的捨棄,左邊的取決於高位,高位為什麼就補什麼

4.邏輯運算(本身意思)

1)&
2)|
3)~:按位取反
4)^

5.小數(浮點數)的二進位制表示

1)m*(2^e)
  m成為位數,e成為指數
2)一種是32位,對應的是float,1位表示符號為,23位表示尾數,8位表示指數
  一種是64位,對應的是double,1位表示符號為,52位表示位數,11位表示指數
3)如何檢視浮點數的具體二進位制形式
  Integer.toBinaryString(Float.floatToIntBits(value))
  Long.toBinaryString(Double.doubleToLongBits(value))

6.字元的編碼

1)編碼分為兩大類,Unicode編碼,和非Unicode編碼:ASCII,ISO 8895-1,Windows-1252,GB2312,GBK,GB18030
2)ASCII包含128個字元,剛好對應計算機最小儲存單位byte
3)GB2312,GBK用兩個位元組表示漢字,GB18030用兩個或者四個位元組表示漢字
4)Unicode包含UTF-32,UTF-16,UTF-8,就是把Unicode編號對應到二進位制形式,其中32使用4個位元組,16大部分使用兩個位元組,少部分是4個位元組,8使用1~4個位元組,並且至於8相容ASCII編碼。
5)編碼轉換實際上轉換的是編碼的二進位制內容,並沒有改變字元看上去的樣子。

7.亂碼

1)亂碼常見的原因:第一種是簡單的解析錯誤。第二種是,在錯誤解析的基礎上進行了編碼轉換。
2)解析錯誤二進位制形式不會發生改變,只需要換一種正確的方式進行檢視就能恢復。
3)解析錯誤後,二進位制不變,資料形式發生改變,再進行編碼轉換,資料形式不會發生改變,但二進位制已經改變了。

8.亂碼恢復

1)使用具有編碼轉換的軟體進行編碼轉換,知道恢復正確的字元
2)使用java
	將多種編碼格式儲存在陣列中,利用雙層for迴圈進行解析。
	核心程式碼:
		Stirng str = "亂碼字串";
		String str1 = new String(str.getBytes("windows-1252"), "GBK18030");//使用特定編碼將位元組陣列轉換為字串
		System.out.println(str1);
3)並不是所有的亂碼都可以恢復。

9.char的真正含義

1)char本質上是一個固定佔用兩個位元組的無符號整數,這個正整數對應於Unicode編號,用於表示那個Unicode編號對應的字   符。
2)char的比較就是Unicode對應的二進位制編號的比較。