Java基礎(chǔ)——原碼展箱、反碼楞抡、補(bǔ)碼 以及 位運(yùn)算

有些工作幾年的同學(xué)已經(jīng)忘記了大學(xué)學(xué)過(guò)的計(jì)算機(jī)基礎(chǔ)(沒(méi)錯(cuò),說(shuō)的就是我)析藕,于是把一些基礎(chǔ)的東西拎出來(lái)復(fù)習(xí)一下召廷。

原碼、反碼账胧、補(bǔ)碼

首先要知道竞慢,計(jì)算機(jī)使用的是補(bǔ)碼。為什么要用補(bǔ)碼呢治泥?慢慢往下看筹煮。

  • 原碼

原碼就是符號(hào)位加上真值的絕對(duì)值, 即用第一位表示符號(hào), 其余位表示值. 比如如果是8位二進(jìn)制:

[+1]原 = 0000 0001
[ -1]原 = 1000 0001

第一位是符號(hào)位,所以8位二進(jìn)制數(shù)的取值范圍是[1111 1111,0111 1111]居夹,即[-127,127]败潦。

  • 反碼

正數(shù)的反碼和原碼相同,負(fù)數(shù)的反碼為:符號(hào)位不變准脂,數(shù)據(jù)位取反劫扒。

[+1]反= 0000 0001
[-1]反= 1111 1110

  • 補(bǔ)碼

正數(shù)的補(bǔ)碼等于原碼。負(fù)數(shù)的補(bǔ)碼等于反碼+1狸膏。

[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]補(bǔ)
[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]補(bǔ)

計(jì)算機(jī)為什么使用補(bǔ)碼沟饥?

對(duì)于人來(lái)說(shuō),可以理解符號(hào)位的概念,計(jì)算加減時(shí)會(huì)計(jì)算真值位贤旷。但是計(jì)算機(jī)并不理解符號(hào)位广料,需要設(shè)計(jì)一種符號(hào)位也可以參與加減的方法。同時(shí)減法可以轉(zhuǎn)換成加法幼驶,于是對(duì)于計(jì)算機(jī)來(lái)說(shuō)更簡(jiǎn)單了艾杏。

假設(shè)符號(hào)位參與運(yùn)算,首先來(lái)看原碼:
計(jì)算十進(jìn)制的 1-1=0盅藻;

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

很明顯是錯(cuò)的糜颠。
現(xiàn)在用反碼來(lái)運(yùn)算:

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

從結(jié)果來(lái)看。真值部分是正確的萧求,問(wèn)題出在符號(hào)位其兴。雖然我們知道-00都是0,但是這個(gè)-是沒(méi)有意義的夸政,怎么能干掉它呢?

來(lái)看補(bǔ)碼的運(yùn)算結(jié)果:

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補(bǔ) + [1111 1111]補(bǔ) = [0000 0000]補(bǔ)=[0000 0000]原

很完美守问,結(jié)果是正確的,也沒(méi)有符號(hào)位問(wèn)題耗帕。
所以,計(jì)算機(jī)就用補(bǔ)碼來(lái)表示數(shù)據(jù)啦体啰。
使用補(bǔ)碼, 不僅僅修復(fù)了0的符號(hào)以及存在兩個(gè)編碼的問(wèn)題, 而且還能夠多表示一個(gè)最低數(shù). 這就是為什么8位二進(jìn)制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補(bǔ)碼表示的范圍為[-128, 127]嗽仪。

計(jì)算機(jī)用補(bǔ)碼,把符號(hào)位參與運(yùn)算沽翔,這其中有什么數(shù)學(xué)原理呢窿凤?有興趣的同學(xué)可以了解一下同余定理

位運(yùn)算

Java里保留了二進(jìn)制的位運(yùn)算操作雳殊,日常開(kāi)發(fā)中位運(yùn)算不是很常用,但是巧妙的使用位運(yùn)算可以大量減少運(yùn)行開(kāi)銷威恼,優(yōu)化算法寝并。

&:按位與。都為1時(shí)為1衬潦,否則為0
|:按位或。有一個(gè)為1時(shí)就為1弦牡,否則為0
~:非漂羊。取反
^:按位異或。相同為0走越,不同為1
<<:左位移運(yùn)算符。左邊溢出的被丟棄旨指,右邊補(bǔ)0
>>:帶符號(hào)右位移運(yùn)算符。正數(shù)時(shí)左邊補(bǔ)0谆构,負(fù)數(shù)時(shí)補(bǔ)1
<<<:無(wú)符號(hào)右移運(yùn)算符。不考慮符號(hào)位呵晨,高位補(bǔ)0,低位溢出時(shí)丟棄

計(jì)算機(jī)怎么計(jì)算加法何荚?

當(dāng)然是用位運(yùn)算實(shí)現(xiàn)的猪杭。

計(jì)算機(jī)計(jì)算二進(jìn)制加法是分三部,第一步為將兩個(gè)加數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)皂吮,計(jì)算兩個(gè)加數(shù)不需要進(jìn)位的和(利用異或運(yùn)算 ^ ),得出的結(jié)果蜂筹。第二部將兩個(gè)加數(shù)進(jìn)行與運(yùn)算(&)。第三部利用與運(yùn)算得到結(jié)果進(jìn)行左移運(yùn)算(<<)(同時(shí)為計(jì)算兩個(gè)加數(shù)需要進(jìn)位的和),得出結(jié)果艺挪。將或異運(yùn)算的結(jié)果和左移運(yùn)算的結(jié)果作為兩個(gè)新的加數(shù),重復(fù)此操作口蝠。直到當(dāng)與運(yùn)算的結(jié)果為0,則異或運(yùn)算的結(jié)果則為兩個(gè)加數(shù)的和所對(duì)應(yīng)的二進(jìn)制數(shù)傲霸。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昙啄,一起剝皮案震驚了整個(gè)濱河市寸五,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伶跷,老刑警劉巖秘狞,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雇初,居然都是意外死亡减响,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門刊橘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)颂鸿,“玉大人,你說(shuō)我怎么就攤上這事嘴纺。” “怎么了尖坤?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵慢味,是天一觀的道長(zhǎng)场梆。 經(jīng)常有香客問(wèn)我或油,道長(zhǎng)感昼,這世上最難降的妖魔是什么罐脊? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮宵溅,結(jié)果婚禮上上炎,老公的妹妹穿的比我還像新娘。我一直安慰自己藕施,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布诲祸。 她就那樣靜靜地躺著救氯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪着憨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天底桂,我揣著相機(jī)與錄音籽懦,去河邊找鬼。 笑死暮顺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捶码。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼档押,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祈纯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起腕窥,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤簇爆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后入蛆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枫甲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年言秸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片举畸。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抄沮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叛买,到底是詐尸還是另有隱情蹋订,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布椒功,位于F島的核電站捶箱,受9級(jí)特大地震影響丁屎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晨川,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一共虑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧看蚜,春花似錦叫搁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梨撞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間时肿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工螃成, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寸宏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓氮凝,卻偏偏與公主長(zhǎng)得像望忆,于是被迫代替她去往敵國(guó)和親朵纷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子永脓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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