在高中之前,數(shù)學(xué)是這樣的,1+1=2 .這些都是死的。
上了大學(xué)之后,這個世界是這樣的……
機器語言最低級的語言,只有兩個標志 0和1.通過這兩個標志來實現(xiàn)計算。
以前我們所做的數(shù)學(xué)運算都是在10進制上面進行的。而計算機只能用二進制的數(shù)來進行運算。
大家都知道9用機器語言為 1001(進制的轉(zhuǎn)換不做詳細介紹)
再轉(zhuǎn)換之前,這個數(shù)可是有要求的,這個數(shù)必須是正整數(shù),才可以進行轉(zhuǎn)換。如果這個數(shù)為 -9,那么這個數(shù)如何用機器語言來表示呢。如果是小數(shù),又是如何表示的。
+9和-9,不就是相差一個符號么,多給一個位,進行標志不就可以了嘛。
+9表示為 0000 1001
-9表示為 0001 1001
利用二進制的數(shù)來處理 我們已知的問題,無非就是編碼,制定規(guī)則而已。
然后,人們就把這種加上符號位的表示方法 稱為 原碼。
計算機中,可以直接計算的運算,只有一個加法。
比如:9+11=20
1001+1011=1 0100
如果,在進行運算的時候使用原碼進行運算
即:0000 1001+0000 1011=01 0100
這個運算是正整數(shù)之間的加法,如果在進行運算的數(shù)之間,有小數(shù),或者 負數(shù)。那應(yīng)該如何處理呢?
注:下面中的碼,帶下劃線的為符號位。
人們都知道,包含負數(shù)的加法,實際上就是所謂的減法。所以要處理的就是,如何把負數(shù)加入到剛才的加法運算中。
9-3=6 改寫成9+(-3)=6
使用原碼表示進行運算:0000 1001 +0001 0011=11100=-12
這個結(jié)果,顯然就不正確了吧。
那這個問題又是如何產(chǎn)生的?這個問題,是由于把原碼中的符號位進行了計算,導(dǎo)致結(jié)果不正確的。
既然結(jié)果不正確,那么就編唄。反正找到一個能計算正確的規(guī)則。起個名字不就得了。
首先,要想正確,需要把符號位 也可以進行計算。
首先,兩個數(shù)進行運算的時候.符號位后面的字符串,代表的才是真實數(shù)值的絕對值。
在說補碼之前,先舉一個例子。
在現(xiàn)實生活中,某一個時刻,你看鐘表的時候是9點。之后,你活動了9個小時。現(xiàn)在是幾點?
先說正常人是怎么算的,正常人肯定是:9+9-12=6 嗯,現(xiàn)在6點了。
還有一種算法,就是。你知道12個小時是一圈。那么過去了9個小時,則可以這么算:9-(12-9)=6 也是6點。
在來看一個上面這個例子:
+9 + (-3)
0000 1001 + 0001 0011
如果利用原碼進行計算,肯定結(jié)果不正確了。符號位之前的暫時不考慮
我把負數(shù)的原碼 進行一下轉(zhuǎn)換,轉(zhuǎn)換成 1100
之后在進行計算: 0000 1001 + 0001 1100 = 0010 0101 符號位發(fā)生了變化。 數(shù)值應(yīng)該為21.但是21>15=2^4-1 所以 影響了符號位。 在自己算一下 -3 到 12的改變量。 所以結(jié)果為 21-15=+6
在此之前,沒有考慮符號位。不考慮符號位,將符號位之后的符號,都按位取反。0改成1,1改成0.
這個形式的編碼稱為 反碼。
這樣計算機就可以計算 二進制的減法了。
在上述的減法運算中,雖然可以得到運算的結(jié)果。但是親們發(fā)現(xiàn)了沒。數(shù)值6根本就沒有在結(jié)果中顯示出來。
所以為了解決上述問題。由-3 轉(zhuǎn)換成 +12的 過程中,數(shù)值改變了15. 但是,15這個數(shù)值 效果,不能等價于 時鐘運算中的 12小時。 所以要將反碼進行+1之后再進行計算。
即 -3的補碼=反碼+1=0001 1100 +1=0001 1101
之后的運算:0000 1001+0001 1101=00101010 數(shù)值為+6
符號位,發(fā)生變化 偶數(shù) 仍為正數(shù)。
現(xiàn)在懂了什么叫補碼了吧。補碼,你還記得什么叫補角嗎?這個跟那個意思一樣,就是湊一塊就圓滿了。
補碼就是 在原碼的基礎(chǔ)上,找到那個 與他正好互補,以便形成一個符號位的數(shù)。
最簡單的獲取方式:原碼-〉反碼 然后+1
在計算機的運算中,也要處理小數(shù)的運算。即所謂的浮點數(shù)。
上次某同學(xué)問我,這個題怎么 0.1+0.1=1啊 。這明顯就是一個坑啊。利用人們已經(jīng)形成的十進制思想,導(dǎo)致想不通。
在學(xué)習(xí)這個問題之前,首先要說一下,在10進制的小數(shù)中,是怎么定義的。
0.1 0.01 分別代表什么。
十進制中,每個位置所代表的權(quán)重都是不同的。
比如100 中的 1,所代表的就是 10^2
那么,0.01中的1代表的是什么? 很顯然 這個小數(shù)里面的1 所代表的是 10^-2
同樣的,十進制的數(shù)值每個位置都有自己的權(quán)重。那么在2進制的數(shù)值中。每個數(shù)也都有自己的權(quán)重。
0.1 很明顯就是 2^-1 了。 那么0.1+0.1 …… 你的世界觀還沒被毀……
至于浮點數(shù)的運算,我就不
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈