成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

為什么一個byte的存儲范圍是-128~127?

為什么一個byte的存儲范圍是-128~127?
文本關鍵字:byte、字節(jié)、二進制位、反碼、補碼
文章目錄
為什么一個byte的存儲范圍是-128~127?

成都創(chuàng)新互聯(lián)服務項目包括鄆城網站建設、鄆城網站制作、鄆城網頁制作以及鄆城網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,鄆城網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到鄆城省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、byte

二、反碼與補碼

**1. 反碼

  1. 補碼
    三、byte的數據范圍
    一、byte**
    在計算機中,一個二進制位是最小的存儲單元,由于是二進制,所以能存儲的數字只能是0和1。顯然,如果我們直接去操作每個二進制位將是很麻煩的過程,所以在編程中我們直接使用的是其他的數據類型,如:byte、int、float。這些數據類型能夠使我們的數據存儲更加方便,我們只需要關心他們能夠存儲多大范圍和什么樣類型的數據就可以了。
    那么一個byte,也就是我們所說的一字節(jié),他所占用的空間是8個二進制位。

1 byte = 8 bit(比特)
這8個bit就是8個二進制位,其中有一個是符號為,剛好可以用0和1來代表正負。那么這8個二進制位到底能夠表示多大范圍的數字呢?對于正數的進制轉換相信難不倒大家,也可以參考底部的相關文章,我們先來看一下負數在二進制下是如何表示和轉換的。

二、反碼與補碼
首先把公式立在這里:

正數的補碼 = 原碼 = 反碼
負數的補碼 = 反碼 + 1
那么首先什么是原碼呢?很簡單,在我們不考慮符號的情況下,按照進制的轉換方法將一個十進制數轉換為二進制數,再添加上相應的符號位就完成了。符號位出現在最前(左)面一位,0代表正數,1代表負數。

+3 -> 11 -> 根據符號和byte長度補全:0000 0011
-5 -> 101 -> 根據符號和byte長度補全:1000 0101
那么為什么會提出反碼和補碼的概念呢?有兩個原因:

1. 反碼
保證在二進制下能夠正常的進行正負數間的運算。

首先我們來看一下如果直接使用原碼存儲,在進行正負數運算的時候會出現什么樣的情況。5+(-3)=2,那么在二進制下的運算也和十進制一樣,直接相加,該進位進位,但是符號位沒法直接參與運算,換句話說,讓計算機直接判斷算式最后的正負其實比較困難。
原碼計算:0000 0011 + 1000 0101 = 1000 1000,結果是:-8(不需要糾結最后的符號位應該取什么,因為在計算機中并沒有采用這種方法進行計算,只是舉例)。顯然,直接采用原碼計算的這種方式在正數下是沒問題的,但是在負數時就不適用了,所以我們需要重新定義一個規(guī)則對負數進行處理。
由于在正數下計算是沒問題的,那么就可以規(guī)定:正數的反碼等于原碼,負數的反碼為除去符號位,其他取反。

+3 -> 原碼:0000 0011 -> 反碼:0000 0011
-5 -> 原碼:1000 0101 -> 反碼:1111 1010
反碼計算后:1111 1101 -> 原碼:1000 0010 -> 十進制:-2。嗯,好像沒什么問題了,但是當一個正數和一個負數的運算結果為正數(如:+5和-3,大家可以自己驗證)或者恰好為0時還是會有問題。

2. 補碼
+0和-0的沖突問題。

從相反數的概念我們可以知道,一個正數肯定存在一個與之對應的相反數,對于整數來說我們只要直接改變一下符號位就行了。But!這個0就很特殊,有一個耳熟能詳的概念:0的相反數還是0,這會直接導致進制的轉換不是一一對應的關系了。

+2 -> 原碼:0000 0010 -> 反碼:0000 0010
-2 -> 原碼:1000 0010 -> 反碼:1111 1101
反碼計算后:1111 1111 -> 原碼:1000 0000 -> 十進制:-0。結果貌似正確,但是在正數中:0000 0000也同樣代表0。那么對于1000 0000,是不能直接被抹去的,那就讓它來代表一個特殊的數字吧:-128。
其實,特殊的不只是這一個數字,如對于Java中的short,占用兩個字節(jié),最高一位為符號位,那么就會出現這個數字:1000 0000 0000 0000,從原碼上看也是-0,對于int類型也是一樣,那么這個問題就可以總結為:符號位為1,其他位均為0,我們應該怎么處理。
于是,為了解決這一類問題,就有了補碼的概念:負數的補碼 = 反碼 + 1。我們用臨界位置的計算來進行舉例,如:(-2)+(-126)=-128。

-2 -> 原碼:1000 0010 -> 反碼:1111 1101 -> 補碼:1111 1110
-126 -> 原碼:1111 1110 -> 反碼:1000 0001 -> 補碼:1000 0010
補碼運算結果:1000 0000(該類數字沒有原碼和反碼)
到此我們該敲個黑板,劃個重點了:在內存中都是使用補碼來進行計算的(整數類型)!

三、byte的數據范圍
明確了上面幾個概念,那么byte的范圍應該就很清楚了。

最大的正數:0111 1111 -> 2^7 - 1 = 127
最大的負數:1000 0000 -> -2^7 = -128
對于其他正數類型的范圍也是如此:

Java中的short:2字節(jié) -> -2^15 ~ 2^15 - 1
Java中的int:4字節(jié) -> -2^31 ~ 2^31 - 1
Java中的long:8字節(jié) -> -2^63 ~ 2^63 - 1
不同語言定義的數據類型在內存中占用的字節(jié)數是不同的,而且也不需要直接記這些范圍,一般來說記字節(jié)就好。

文章標題:為什么一個byte的存儲范圍是-128~127?
網站地址:http://jinyejixie.com/article22/pgepjc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、標簽優(yōu)化網頁設計公司、域名注冊網站排名、自適應網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站制作
禹州市| 措美县| 洛宁县| 县级市| 谢通门县| 永登县| 衡阳市| 新巴尔虎右旗| 晋江市| 三亚市| 沁水县| 新干县| 蓬安县| 澄城县| 连江县| 永春县| 辽源市| 江西省| 安龙县| 彭州市| 东兴市| 宾阳县| 铜陵市| 崇义县| 吕梁市| 民丰县| 永城市| 东光县| 安阳市| 新平| 乐平市| 贡嘎县| 东阳市| 周至县| 金坛市| 湛江市| 怀来县| 扬中市| 桃江县| 旬邑县| 六盘水市|