-
1 # IT技術討論
-
2 # 夕陽雨晴
在說byte之前,我們先來說說位元,位元是表示資訊的最小單位,是二進位制數的一位包含的資訊或2個選項中特別指定1個的需要資訊量。一般來說,n位元的資訊量可以表現出2的n次方種選擇。而byte意為“位元組”,是計算機檔案大小的基本計算單位。1byte=8bits,兩者換算是1:8的關係。1bit 只能有一個值,0 或者 1。
在《Head First Java》中的描述byte(基本資料型別,裝配型別為Byte)作為Java中4中基本整數型別的一種,其它三種是long、int、short。透過前面的瞭解,byte是1個位元組,也就是8位,以杯子類比,每種整型型別變數有固定的位數(杯子大小):byte,8bits,-128~127;short,16bits,-32768~32767;int,32bits,-2147483648~2147483647;long,64bits,-很大~+很大。
具體的關於byte的計算方式,推薦以下兩種,混合著進行理解記憶。
第一種是機器記憶體儲結構的分析:
在計算機內,定點數有3種表示法:原碼、反碼和補碼
[原碼]二進位制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
[反碼]表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
[補碼]表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
計算機資料是用補碼錶示的,正數的補碼就是它的原碼,而負數的補碼是將其原碼(取絕對值後的原碼)取反加1得到的。
第二種是byte概念意義上的理解:
1.確定byte是1個位元組,也就是8位
2.最大的應該是0111 1111,因為第一位是符號位,0表示正數
3.最小的應該是1000 0000(1111 1111是是負數-1的補碼)
4.0111 1111即127
5.1000 0000按照上面的解釋為先減一,得到0111 1111,然後按位取反得到1000 0000,該結果為欲求負數的絕對值,所以結果是-128(和概念反著來求出該負數)。
回覆列表
在這裡我們需要先了解另一個單位:bit “位元”,bit是計算機進行資料儲存的最小單位,計算機內部利用二進位制儲存資料,一bit(位元)就代表一位二進位制。即一個bit就代表一個0或1。
而Byte(“位元組”)是計算機進行資料儲存的基本單位。一Byte有八位二進位制也就是1Byt = 8bit
資料的儲存又分為有符號和無符號數,有符號數二進位制的最後高代表符號,0代表+(正),1代表-(負),如:有符號數011 轉換為十進位制為2^0+2^1=3,無符號111轉換為十進位制則為-3。(有下劃線的數字代表符號位,後面同樣如此)
然後我們開始正式介紹Byte範圍的計算
當Byte無符號時Byte的範圍可以由二進位制表示為 0000 0000 ~ 1111 1111,
將二進位制轉化為十進位制:
0000 0000 = 0;
1111 1111 = 2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7 = 255;
所以Byte的取值範圍為 0 ~255 。
當Byte有符號時由於最後一位變為了符號位 所以0 1111111成了最大的數。
將二進位制轉化為十進位制:
0 1111111 = 2^0+2^1+2^2+2^3+2^4+2^5+2^6 = 127;
負數需要用補碼錶示,1 1111111的絕對值取反得到0000000 轉換為十進位制為 0加一取反則為補碼 :-1
將1 0000000的絕對值取反得到11111111 轉換為十進位制為 127
再加一取反為 -128
所以Byte有符號時的取值範圍為 -128~127
java採用的有符號儲存,所以java中Byte的取值範圍採用有符號時計算。