1. 程式人生 > >弄懂進位制、bit、java基本資料型別(byte、short、int 、char 、String)、ASCII、Unicode、UTF-8、UTF-16的關聯關係及UTF-8、UTF-16編碼原理

弄懂進位制、bit、java基本資料型別(byte、short、int 、char 、String)、ASCII、Unicode、UTF-8、UTF-16的關聯關係及UTF-8、UTF-16編碼原理

首先普及一下基本概念:

1.數值(百度百科):指的是用數目表示的一個量的多少;

2.進位制(百度百科):也就是進位計數制,是人為定義的帶進位的計數方法。對於任何一種進位制---X進位制,就表示每一位置上的數運算時都是逢X進一位。 十進位制是逢十進一,十六進位制是逢十六進一,二進位制就是逢二進一,以此類推,x進位制就是逢x進位。

現假設有一串葡萄的個數需要表達出來:用二進位制表達則為:10101,用十進位制表達則為:21,用十六進位制表達則為15,因此進位制只是數值的表示方式(計數方式),同樣的數量用不同的進位制有不同的表示,但數值是一樣的!

3.二進位制:在計算機內部,所有的資訊最終都表示為一個二進位制的字串。計算機計算是根據電壓的高低變化來計算的,高電壓是1,低電壓是0,目前只能識別這樣的訊號,因此只能是二進位制。

4.位(bit):是電子計算機中最小的資料單位,每一位的狀態只能是0或1。如10101就有5位。

5.位元組(byte):1位元組(byte)=8位(bit),每一個二進位制位(bit)有0和1兩種狀態,因此八個二進位制位就可以組合出256種狀態,這被稱為一個位元組(byte)。也就是說,一個位元組一共可以用來表示256種不同的狀態,每一個狀態對應一個符號,就是256個符號,從00000000到11111111。

在Java中,byte只能表示-128~127範圍內的數(即2^8=256個),超出此範圍外的數值都表示不了。可以用idea宣告一個byte型別的變數,然後賦值150,看報什麼錯!

6.short、int:在Java中資料型別整型short=2位元組,1位元組等於8位,2位元組等於16位,每位有0或1兩種狀態,則short可以組合2^16=65536種狀態,取值範圍則為-32768~32767(將65536除以2平分到正負數兩邊),超出此範圍外的數值都表示不了。

資料型別整型int=4位元組,1位元組等於8位,4位元組等於32位,每位有0或1兩種狀態,則short可以組合2^32=4294967296種狀態,取值範圍則為--2147483648~2147483647(將4294967296除以2平分到正負數兩邊),超出此範圍外的數值都表示不了。

7.char:字元代表了字母表中的字元,標點符號和其他的一些符號(中文字元等)。在計算機中,文字是由字元組成的。

8.字元集合(ASCII、Unicode):由一套用於特定用途的字元組成,例如支援西歐語言的字元集合,支援中文的字元集合。字元集合只定義了符號和他們的語意,其實跟計算機沒有直接關係。現實生活中,不同的語系有自己的字元集合,例如藏文有自己的字元集合,漢文有自己的字元集合。到計算機的世界中,也有各種字元集合,例如

ASCII字元集合GB2312字元集合GBK字元集合。還有一個其他字元集合的超集--Unicode字符集定義了幾乎絕大部分現存語言需要的字元,是一種通用的字符集,來支援多語言環境(可以同時處理多種語言混合的情況)。各個國家和地區在制定編碼標準的時候,“字元集合”和“字元編碼”一般都是同時制定的。所以像ASCII字元集合一樣,它也同時代表了一種字元的編碼。

9.字元編碼:是一套規則,定義了在計算機記憶體中如何表示字元,是字符集中的每個字元與計算機記憶體中位元組之間的轉換關係,也可以認為是把字元數字化,規定每個“字元”分別用一個位元組還是多個位元組儲存,用哪些位元組來儲存。例如ASCII編碼[你沒看錯,它既是一種字元集合,也是一種字元編碼],定義了英文字母和符號在計算機中的表示方式,是用一個位元組來表示。Unicode字元集合,有好幾種字元編碼方式,例如變長度編碼的UTF8UTF16等。中文字符集也有很多字元編碼,例如上文提到的GB2312編碼,GBK編碼等。