byte 為什么是從-128到127报破?

byte 為什么是從-128到127?

標(biāo)簽 : 隨手記


計(jì)算機(jī)表示數(shù)據(jù)的規(guī)則:

前提:我們假設(shè)一個(gè)數(shù)字用4位來表示蚤吹。

這個(gè)問題的解釋要從符號位說起例诀,在計(jì)算機(jī)的世界里,數(shù)字的表示采用的是二進(jìn)制的規(guī)則裁着,如果自然界只存在正數(shù)繁涂,那么計(jì)算機(jī)的編碼方式將無比簡單,直接就能使用二進(jìn)制來表示二驰。比如十進(jìn)制的八扔罪,直接就用1000表示就可以。

但是自然界還存在負(fù)數(shù)桶雀,在現(xiàn)實(shí)社會中我們使用正號和負(fù)號來表示矿酵,但是對于計(jì)算機(jī)來說,要添加正號和負(fù)號不是那么容易的事情矗积,會帶來電路復(fù)雜度成倍的上升全肮。于是,所謂的符號位出現(xiàn)了棘捣,采用最高位來表示符號位辜腺,0為正數(shù),1為負(fù)數(shù)(為什么乍恐?后面會有猜測)评疗。好多文章都說是為了解決減法問題才引入的符號位。我覺得本質(zhì)上符號位就是為了解決計(jì)算機(jī)如何表示負(fù)數(shù)而出現(xiàn)的禁熏。

原碼壤巷、反碼、補(bǔ)碼

綜述

有了正數(shù)和負(fù)數(shù)瞧毙,下面說說運(yùn)算的問題胧华,根據(jù)馮諾依曼計(jì)算機(jī)體系得知寄症,一臺計(jì)算機(jī)由運(yùn)算器,控制器矩动,存儲器有巧,輸入輸出設(shè)備組成,其中運(yùn)算器只有加法運(yùn)算器(其他的運(yùn)算全部轉(zhuǎn)換成加法運(yùn)算來完成)悲没,所以呢篮迎,計(jì)算機(jī)世界的減法只能用加法表示。

比如 4-2 只能用4+(-2)運(yùn)算

原碼

那么問題來了示姿,-2怎么表示甜橱?最直觀的表示方法表示為1010,最高位是符號位栈戳。

這樣的表示方式岂傲,我們稱為原碼表示法。然后我們就愉快的開始了運(yùn)算子檀。

4-2=0100+1010=1110=-6
2-2=0010+1010=1100=-4

很明顯結(jié)果是不對的镊掖,所以不能用原碼來表示負(fù)數(shù)。
但是主要的問題是因?yàn)閮蓚€(gè)相反數(shù)相加不等于0導(dǎo)致其他運(yùn)算的結(jié)果錯誤褂痰。

假設(shè)解決了相反數(shù)相加等于0:

4-2=2+2-2=2亩进,那么其他的運(yùn)算也是可以得到正確結(jié)果的。

反碼

為了解決這個(gè)問題缩歪,我們引入了反碼

反碼的思想是啥呢归薛?

負(fù)數(shù)是一個(gè)正數(shù)的相反數(shù),所以我們將一個(gè)正數(shù)全部按位取反來表示一個(gè)負(fù)數(shù)驶冒,這種表示負(fù)數(shù)的方式就是反碼苟翻。

比如:

2是0010,那么-2就是1101骗污,然后我們再來開始愉快的運(yùn)算之路。

4-2=0100+1101=0001(反碼)=0001=1
2-2=0010+1101=1111(反碼)=1000=-0
-4-2=1011+1101=1000(反碼)=1111=-7
-1-2=1110+1101=1011(反碼)=1100=-4

實(shí)驗(yàn)發(fā)現(xiàn)除了兩個(gè)相反數(shù)相加稍微接近我們所熟知的結(jié)果沈条,其他的結(jié)果簡直不忍直視需忿,所以用反碼來表示負(fù)數(shù)也是不靠譜的。

TIPS:實(shí)際上蜡歹,反碼是可以用來做運(yùn)算的

我們發(fā)現(xiàn)當(dāng)符號位存在進(jìn)位的時(shí)候屋厘,此時(shí)你的運(yùn)算的結(jié)果可能跟你的預(yù)期是有差距的,但是是可以通過修正結(jié)算過程來達(dá)到期望的結(jié)果的月而。修正的方法就是如果符號位有進(jìn)位的情況下汗洒,將進(jìn)位加到結(jié)果的最后一位就可以對結(jié)果達(dá)成修正。

比如:

4-2=0100+1101=0001+1=0010=2 結(jié)果正確
-4-2=1011+1101=1000(反碼)+1=1001(反碼)=1110=-6 結(jié)果正確
-1-2=1110+1101=1011(反碼)+1=1100(反碼)=1011=-3 結(jié)果正確

這說明反碼是可以用來進(jìn)行減法計(jì)算的父款,但是需要付出額外的代價(jià)溢谤,并且沒有解決+0和-0的問題


補(bǔ)碼

補(bǔ)碼的登場:

那怎么辦呢,怎么來解決負(fù)數(shù)的表示問題呢瞻凤?

(噔噔登噔,前方高能)偉大的科學(xué)家們觀察自然界的運(yùn)行規(guī)律世杀,總結(jié)出了兩個(gè)很牛逼的概念阀参,一個(gè)叫"模",一個(gè)叫"補(bǔ)數(shù)"瞻坝。

啥是模蛛壳?(肉夾饃,東北的饃饃,咳)

官方術(shù)語:“乃叮”是指一個(gè)計(jì)量系統(tǒng)的計(jì)數(shù)范圍.如時(shí)鐘衙荐、日歷等.計(jì)算機(jī)也可以看成一個(gè)計(jì)量機(jī)器,它也有一個(gè)計(jì)量范圍.只要有一個(gè)計(jì)量范圍,即都存在一個(gè)“母〈矗”.“挠且鳎”實(shí)質(zhì)上是計(jì)量器產(chǎn)生“溢出”的量,它的值在計(jì)量器上表示不出來,計(jì)量器上只能表示出模的余數(shù).

比如說,十二小時(shí)制的時(shí)鐘采用的是十二進(jìn)制來表示時(shí)間蒸矛,一到了12點(diǎn)瀑罗,再向后就又從1開始了,所以12是時(shí)鐘系統(tǒng)的模雏掠。12是一個(gè)范圍斩祭,超過了十二一切從頭來過。好多文章都說時(shí)鐘系統(tǒng)的計(jì)量范圍是0到11乡话,但是沒有解釋為什么摧玫,我這邊猜測是因?yàn)闀r(shí)鐘采用的是12進(jìn)制,如果不發(fā)生進(jìn)位的話绑青,那它就只能表示0到11這12個(gè)數(shù)诬像。這跟我們的現(xiàn)實(shí)生活是對應(yīng)得上的,我們一般講的12點(diǎn)其實(shí)是0點(diǎn)闸婴,所以12本來是在時(shí)鐘表示不出來的值坏挠,是一個(gè)溢出的量,但是為了方便人們的理解邪乍,才有了十二點(diǎn)的表示方式降狠。

啥是補(bǔ)數(shù)?(歌手樸樹庇楞?)

民間解釋:當(dāng)M是系統(tǒng)的模的時(shí)候榜配,如果|A|+|B|=M,我們就說A的補(bǔ)數(shù)是B吕晌,這個(gè)概念跟補(bǔ)角的概念類似蛋褥,如果兩個(gè)角相加為180°,那么稱兩個(gè)角互補(bǔ)睛驳。(實(shí)際上補(bǔ)數(shù)還有一些別的解釋烙心,但是目前我覺得這種解釋比較合理)膜廊。

說清楚了模和補(bǔ)碼,然后最重要的一個(gè)發(fā)現(xiàn)來了弃理,在有模的系統(tǒng)中溃论,減去一個(gè)數(shù)等于加上它的補(bǔ)數(shù)

還是以時(shí)鐘為例:如果我們把順時(shí)針看成正,把逆時(shí)針看成負(fù)痘昌,現(xiàn)在是2點(diǎn)钥勋,如果想要變成1點(diǎn),可以逆時(shí)針轉(zhuǎn)一格辆苔,也可以順時(shí)針轉(zhuǎn)11格算灸,寫成數(shù)學(xué)式子就是

2-1=2+11

為什么?除了補(bǔ)數(shù)可以解釋驻啤,還有說法是一個(gè)有模的系統(tǒng)里菲驴,如果發(fā)生數(shù)的溢出,那么溢出的這個(gè)數(shù)表示的數(shù)就是對M求模的結(jié)果骑冗。(因?yàn)槲覀冎罆r(shí)鐘的取值范圍是0-11赊瞬,超過了11,將又從0開始)

2+11=1+12=1或者2+11=13 mod 12=1

將時(shí)鐘遷移到計(jì)算機(jī)系統(tǒng):比如一個(gè)4位的二進(jìn)制贼涩,最多可以表示2^4=16個(gè)數(shù)巧涧,最大的數(shù)是1111=15,超過1111就會發(fā)生進(jìn)位的情況遥倦,變成10000谤绳,因?yàn)橹挥兴奈唬员硎镜氖?000=0袒哥,然后再加一缩筛,變成0001=1,開始了循環(huán)堡称,那么模的值就是16這個(gè)溢出的值瞎抛。

由于有了上面的基礎(chǔ),我們很輕松的就可以將減法直接變成加法來計(jì)算却紧。

還是以前的例子:

4-2=4+14=0100+1110=0010=2

其中用14來表示-2的方式稱為補(bǔ)碼的方式婿失,-2的補(bǔ)碼就是1110,只不過它剛好等于反碼加一而已啄寡。

2-2=2+14=0010+1110=0000=0

而且看起來連正0和負(fù)0的問題解決,而且符號位可以直接參與運(yùn)算哩照。

-4-2=12+14=1100+1110=1010(補(bǔ)碼)=-2=14=1110=-6
-1-2=15+14=1111+1110=1101(補(bǔ)碼)=-5=11=1011=-3

這樣計(jì)算機(jī)的設(shè)計(jì)只需要支持加法計(jì)算器挺物,支持補(bǔ)碼的編碼方式就行,電路會負(fù)擔(dān)比較小飘弧。

到此识藤,負(fù)數(shù)的編碼告一段落砚著,還有一個(gè)問題就是為什么在符號位1表示負(fù)數(shù),0表示正數(shù)

猜測:最高位是符號位這點(diǎn)是必須的(因?yàn)樾枰硎矩?fù)數(shù))痴昧,所以是剩下的位數(shù)來表示數(shù)的值稽穆,拿4位來說,三位的正數(shù)最大是111=7赶撰,0到7舌镶,然后4位表示的數(shù)只能有16個(gè)數(shù),所以還剩下8個(gè)數(shù)豪娜,所以負(fù)數(shù)最小不會小于-8餐胀,范圍可能是-1到-8,那-1到-8的話瘤载,補(bǔ)數(shù)就是8到15全是比8大的數(shù)否灾,所以最高位肯定是1,所以負(fù)數(shù)的補(bǔ)碼最高位肯定是1鸣奔,也許這就是負(fù)數(shù)的符號位是1的原因墨技。


ps:其實(shí)我下面的參考文獻(xiàn)里面是有原碼、反碼挎狸、補(bǔ)碼的來歷的扣汪,為了印象深刻,自己重新寫一遍伟叛。

byte的取值范圍

回到正題私痹,為啥byte的范圍是-128到正的127

java 里面的數(shù)不支持無符號類型,全是有符號類型的數(shù)统刮。
首先紊遵,因?yàn)閎yte是8位,然后又因?yàn)槎M(jìn)制的最高位是符號位侥蒙,正數(shù)是0暗膜,負(fù)數(shù)是1,所以表示大小的就是剩下的位數(shù)鞭衩。

對于byte來說就是七位学搜,七位正數(shù)最大的就是1111111 轉(zhuǎn)換成十進(jìn)制就是127,從 2的0次方加到2的6次方论衍。

然后負(fù)數(shù)呢瑞佩,涉及到負(fù)數(shù)的編碼方式:

這里模是256,所以10000000到11111111其實(shí)表示的范圍是-128到-1
因?yàn)?0000000是128坯台,補(bǔ)數(shù)是-128炬丸,11111111是255,補(bǔ)數(shù)是-1蜒蕾。
所以稠炬,byte的范圍是-128到127焕阿,一共256個(gè)數(shù)。

參考文獻(xiàn) 補(bǔ)碼首启、原碼暮屡、反碼的來歷
參考文獻(xiàn) 為什么八位二進(jìn)制數(shù)表示范圍為-128~+127?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毅桃,一起剝皮案震驚了整個(gè)濱河市褒纲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疾嗅,老刑警劉巖外厂,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異代承,居然都是意外死亡汁蝶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門论悴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掖棉,“玉大人,你說我怎么就攤上這事膀估♂:ィ” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵察纯,是天一觀的道長帕棉。 經(jīng)常有香客問我,道長饼记,這世上最難降的妖魔是什么香伴? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮具则,結(jié)果婚禮上即纲,老公的妹妹穿的比我還像新娘。我一直安慰自己博肋,他們只是感情好低斋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匪凡,像睡著了一般膊畴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上病游,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天巴比,我揣著相機(jī)與錄音,去河邊找鬼。 笑死轻绞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的佣耐。 我是一名探鬼主播政勃,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兼砖!你這毒婦竟也來了奸远?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤讽挟,失蹤者是張志新(化名)和其女友劉穎懒叛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耽梅,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薛窥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眼姐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诅迷。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖众旗,靈堂內(nèi)的尸體忽然破棺而出罢杉,到底是詐尸還是另有隱情,我是刑警寧澤贡歧,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布滩租,位于F島的核電站,受9級特大地震影響利朵,放射性物質(zhì)發(fā)生泄漏律想。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一哗咆、第九天 我趴在偏房一處隱蔽的房頂上張望蜘欲。 院中可真熱鬧,春花似錦晌柬、人聲如沸姥份。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澈歉。三九已至,卻和暖如春屿衅,著一層夾襖步出監(jiān)牢的瞬間埃难,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涡尘,地道東北人忍弛。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像考抄,于是被迫代替她去往敵國和親细疚。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容