Java為什麼占用四個字節你知道嗎
簡單瞭解計算機為什麼要采用二進制表示信息:
因為計算機作為一種電子計算機工具,是由大量的電子器件組成的,在這些電子器件中,電路的通斷,電位的高低,用兩個數字符號“1”和“0”分別表示容易實現,同時二進制的運算法則也很簡單,因此計算機內部通常采用二進制代碼來作為內部存儲,傳輸和處理數據,二進制數據是用0和1兩個數碼來表示的數,它的基數為2(逢二進一,借一當二)
其實最開始使用的並不是二進制,而是十進制,因為人們有十個手指頭,手可以表示十個數字,所以十進制是比較合理的,0的概念是之後很久才誕生的,所以是0-10而不是0-9。
電子計算機出現以後,使用電子管來表示十種狀態過於復雜,所以所有的電子計算機中隻有兩種基本的狀態,開和關。也就是說,電子管的兩種狀態決定瞭以電子管為基礎的電子計算機采用二進制來表示數字和數據。常用的進制還有8進制和16進制,在電腦科學中,經常會用到16進制,而十進制的使用非常少,這是因為16進制和二進制有天然的聯系:4個二進制位可以表示從0到15的數字,這剛好是1個16進制位可以表示的數據,也就是說,將二進制轉換成16進制隻要每4位進行轉換就可以瞭。
為什麼使用二進制我們瞭解瞭,現在就直奔我們主題
二進制位分析
首先計算機隻認識二進制。而一個字節是8位二進制,隻用0和1來表示狀態,那麼我們看看一位能表示多少個狀態
1 位:0 和 1 也就是2的一次方,最多表示2個狀態(要麼是0,要麼是1)
2 位:00 和 11 也就是2的2次方,最多表示4個狀態,也就是(00,01,10,11)
3 位: 000 和 111 也就是2的3次方,最多表示8個狀態,也就是(000,001,010,011,100,101,110,111)
……以此類推
8位: 就可以表示2的8次方個狀態 = 256個狀態
9位:表示2的9次方 = 512個狀態
10位:表示2的10次方 = 1024個狀態
32位:表示2的32次方 = 4294967296個狀態
查看底層源碼我們可以看到
而int如果轉成十進制的話,那麼他們的范圍[-231~231 -1],也就是“-2147483648 ~ 2147483647”
計算機為瞭區分正負數,所以把256個狀態一半給瞭負數,也就是“-128~127”這256個數(因為要正負,所以從8位中拿走以為來表示)
byte 占 1個字節 = 8個比特位 就可以表示2的8次方個數
short占 2個字節 = 16個比特位……
int 占 4 個字節 = 32個比特位
那麼為什麼int就占瞭4個字節呢?
在JAVA中一共有八種基本數據類型,它們分別是 byte、short、int、long、float、double、char、boolean
其中byte、short、int、long都是表示整數的,隻不過他們的取值范圍不一樣
- byte 占用1個字節 它的取值范圍為 -128 ~ 127
內存開銷:
byte a = 1; // 00000001
- short 占用2個字節,它的取值范圍為 -32768 ~ 32767
short a = 1; // 00000000 00000001
- int占用4個字節,它的取值范圍為 -2147483648 ~ 2147483647
int a = 1; // 00000000 00000000 00000000 00000001
- long占用8個字節,它的取值范圍為 -9223372036854774808 ~ 9223372036854774807
這裡就不寫瞭~
問:所有的int都是占四個字節嗎?
回答:不一定是4個字節,他和操作系統有關系,int占多少個字節是由編譯器決定的 以前16位系統中int是2個字節的,而現在32位的系統,int是4個字節的,其實現在基本上都是64位系統, 所謂的16位32位64位系統是由cpu決定的,由機器指令的尋址、寄存器位數決定的 os受cpu的限制,但在32位的cpu下16位的os也可以跑 很多os是向前兼容的,就是使以前的程序也能運行,如果編譯器本身是16位時代做的,那麼os會提供一個模擬16位的子環境供這個編譯器使用 非要轉牛角尖的話,int隻是語言定義裡面的一個關鍵字,隻對compiler可見,complier說它是幾位就是幾位,和os/cpu都沒關系
總結
本片文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!