计算机负数用英语怎么说,负数在计算机中如何表示
舉例來說,+8在計算機中表示為二進制的1000,那么-8怎么表示呢?
很容易想到,可以將一個二進制位(bit)專門規定為符號位,它等于0時就表示正數,等于1時就表示負數。比如,在8位機中,規定每個字節的最高位為符號位。那么,+8就是00001000,而-8則是10001000。但是,隨便找一本《計算機原理》,都會告訴你,實際上,計算機內部采用2的補碼(Two's Complement)表示負數。
什么是2的補碼?
它是一種數值的轉換方法,要分二步完成:
第一步,每一個二進制位都取相反值,0變成1,1變成0。比如,00001000的相反值就是11110111。
第二步,將上一步得到的值加1。11110111就變成11111000。
所以,00001000的2的補碼就是11111000。也就是說,-8在計算機(8位機)中就是用11111000表示。
不知道你怎么看,反正我覺得很奇怪,為什么要采用這么麻煩的方式表示負數,更直覺的方式難道不好嗎?為什么要用2的補碼?
首先,要明確一點。計算機內部用什么方式表示負數,其實是無所謂的。只要能夠保持一一對應的關系,就可以用任意方式表示負數。所以,既然可以任意選擇,那么理應選擇一種最方便的方式。2的補碼就是最方便的方式。它的便利體現在,所有的加法運算可以使用同一種電路完成。
還是以-8作為例子。假定有兩種表示方法。一種是直覺表示法,即10001000;另一種是2的補碼表示法,即11111000。請問哪一種表示法在加法運算中更方便?
隨便寫一個計算式,16 + (-8) = ?
16的二進制表示是 00010000,所以用直覺表示法,加法就要寫成:
00010000
+10001000
---------
10011000
可 以看到,如果按照正常的加法規則,就會得到10011000的結果,轉成十進制就是-24。顯然,這是錯誤的答案。也就是說,在這種情況下,正常的加法規 則不適用于正數與負數的加法,因此必須制定兩套運算規則,一套用于正數加正數,還有一套用于正數加負數。從電路上說,就是必須為加法運算做兩種電路。
現在,再來看2的補碼表示法。
00010000
+11111000
---------
100001000
可以看到,按照正常的加法規則,得到的結果是100001000。注意,這是一個9位的二進制數。我們已經假定這是一臺8位機,因此最高的第9位是一個溢出位,會被自動舍去。所以,結果就變成了00001000,轉成十進制正好是8,也就是16 + (-8) 的正確答案。這說明了,2的補碼表示法可以將加法運算規則,擴展到整個整數集,從而用一套電路就可以實現全部整數的加法。
2的補碼的本質及正確性
我們要看先一下模的概念
“模”是指一個計量系統的計數范圍。如時鐘等。計算機也可以看成一個計量機器,它也有一個計量范圍,即都存在一個“模”。例如:時鐘的計量范圍是0~11,模=12。表示n位的計算機計量范圍是0~2^(n)-1,模=2^(n)。“模”實質上是計量器產生“溢出”的量,它的值在計量器上表示不出來,計量器上只能表示出模的余數。任何有模的計量器,均可化減法為加法運算。例如:
假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法:你可以往回撥4個小時,也可以向前撥8個小時(12-10+6,在鐘表系統里模是12)。在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。對“模”而言,8和4互為補數。實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特性。共同的特點是兩者相加等于模。對于計算機,其概念和方法完全一樣。n位計算機,設n=8, 所能表示的最大數是11111111,若再加1稱為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進制系統的模為2^8。 在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以了。
再次重申一下這句話:
在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。所以對于模為10000 0000的8位系統來說,減去b和加上10000 0000-b是一個道理,而(10000 0000-b)是什么?恰好就是b的補碼。
補碼怎么求,“取反加一”這口訣怎么來的?
承認了8 - 5 = 8 + (-5的補碼)這個事實后,我們來看-5的補碼怎么求,“取反加一”怎么來的
其實看完了上面的模的問題,該問題的答案基本已經出來了
-5的補碼是 10000 0000 - 5 = 1111 1111 + 1 -5 = (1111 1111 - 5) + 1
1111 1111減去一個數事實上就是在對這個數取反,后面那個是+1
兩個小問題的解釋:
(1)32位系統里,int的最大值為01111111 11111111 11111111 11111111,加1之后為10000000?? 00000000?? 00000000?? 00000000。這個數是什么?
首先這是個負數-->負數在計算器里都是補碼形式存放-->這是個補碼-->那么真值是?--> -2147483648(已知負數的補碼求該負數,不會求的百度一下吧。
(2)對于unsigned,最大值(32個1)加1后最前面的1自然丟失,剩下32個0,所以就是0。
總結
以上是生活随笔為你收集整理的计算机负数用英语怎么说,负数在计算机中如何表示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 陕西师范大学计算机科学学院公寓楼,陕西师
- 下一篇: 江苏省计算机一级在线考试,2020江苏省