「程式設計師上下50年」計算機憑啥用二進位

2021-01-09 匯智動力IT學院

計算機憑啥用二進位

不管是不是程式設計師,大家可能都知道二進位是個什麼東西。

包括計算機在內,幾乎所有電子設備都採用的二進位。

可是,為什麼會這樣呢?

在說這個問題之前,先解決另一個問題——為什麼大多數國家的人類都採用十進位?

因為,人類有十根手指。

然後,沒了。

當然,在人類文明發展的長河中,也誕生過一些其他的進位。

比如蘇美爾人使用十二進位,據說是通過大拇指點其他四根手指的指節得出的。

還有瑪雅人的二十進位,大概率就是還算上了腳趾。

古巴比倫用六十進位,難道是五根手指搭配十二個指節?

根據人類選擇計數方法的進位,不難發現,人類總是根據身邊最直接的物品來確定進位。

如果人類只有七根手指,那估計我們就該用七進位了。

對人類如此,對機器也是如此。

人類有手,機器有開關。

開關只有「接通」和「斷開」兩種狀態,正好跟「1」「0」對應。

於是,機器用二進位便成了天經地義的事情。

僅僅是表示一個數據的話,二進位似乎只要增加位數就能做到。

但要命的來了。數字不光有正數和0的存在,還有負數。

於是,人們就把最高位拿出來表示符號。

正數用「0」,負數用「1」。

用這種方式表示的數字叫做機器數。也叫做原碼。

比如

+3原碼是0000 0011

-5原碼是1000 0101

8bit原碼數值範圍為[1111 1111,0111 1111]即[-127,127],共255個數字。

看起來似乎很方便,然而,當進行不同符號的加法或同符號減法運算的時候,麻煩來了。

原碼的運算不能直接判斷結果的正負,需要比較兩個數值的絕對值,由絕對值大的值來決定符號。

比如

「+3」+「-5」

1000 0101絕對值0000 0101

0000 0011絕對值0000 0011

符號相反的加法即是絕對值的減法

所以結果的絕對值為0000 0010(2)

再看符號,1000 0101絕對值大於0000 0011

所以結果應該為1000 0010(-2)

所以「+3」+「-5」=「-2」

很複雜對不對?

不光人覺得麻煩,機器也覺得麻煩。

於是,便有了反碼。

那麼,反碼是什麼呢?

正數的反碼跟原碼一致。

負數的反碼是將原碼除符號位以外所有位取反。

比如

+3反碼是0000 0011

-5反碼是1111 1010

8bit反碼數值範圍為[1000 0000,0111 1111]即[-127,127] ,共255個數字。

那,反碼有什麼好處呢?

同樣,「+3」+「-5」

0000 0011 + 1111 1010 = 1111 1101(-2反碼)

是不是簡單多了?

但,還是有一個問題。這個問題是從原碼遺留下來的。

無論原碼還是反碼,0有正負兩種0

0000 0000(原碼 +0)

1000 0000(原碼 -0)

0000 0000(反碼 +0)

1111 1111(反碼 -0)

這個問題又該怎麼解決呢?

於是,便終於有了補碼。

補碼是這麼表示的:

正數的補碼依然是原碼

負數的補碼是將原碼除符號位外各位取反,之後+1。

也就是將反碼+1。

比如

+3補碼是0000 0011

-5補碼是1111 1011

雖然有點難理解,但是採用補碼之後,不光解決了計算問題,還把正負零的問題規避了。

除了這兩點,補碼還能比原碼和反碼多表示一個數字。

8bit補碼數值範圍為[1000 0000,0111 1111]即[-128,127] ,共256個數字。

當「+3」 + 「-5」時

0000 0011 + 1111 1011 = 1111 1110(-2補碼)

0隻剩下了0000 0000這一種表示方法。

反碼的1111 1111現在是補碼中-1。

反碼的1000 0000(-127)也就成了補碼可以多表示的-128。

因此,在計算機系統中,數值一律用補碼來表示和存儲。

如今,計算機固然已經十分強大,但別忘記,是人類的智慧賦予的這一切。

好了,那麼我們這一期的內容到這裡就結束了。

※本系列更多內容:

01:程式語言發展史

02:程式設計師和BUG的鬥爭史

03:如果程式設計師去開餐廳……

如果你還有什麼想知道的關於程式設計師的好玩的事情,歡迎給匯智妹留言喔~

相關焦點

  • 計算機考試進位間轉換,能用計算器嗎?
    計算機考試不論是國考,還是專升本等考試,總會考幾分關於進位轉換的題目,那麼很多小夥伴不會算或者算不對怎麼辦?有小夥伴會問我能用計算器不。首先和大家講解一下電腦上的計算器進位轉化的設置及運用方法,這裡以win7系統為例:①先找到附近裡面的計算器
  • |程式設計師|電腦|二進位|編程|軟體學院
    10月24日是中國程式設計師節因為1024是2的十次方二進位計數的基本計量單位之一計算機大都使用二進位系統二進位的世界中1表示為12表示為102的平方表示為1002的十次方即1024表示為10000000000在清華園裡千萬不要以為只有計算機系才有程式設計師畢竟 這世界上有10種人一種是會二進位的一種是不會二進位的(bushi)
  • 計算機編碼|二進位
    講計算機編碼,首先必須得講講二進位。二進位是什麼,計算機為什麼採用二進位,接下來我們就回答這兩個問題來聊一聊計算機中的二進位。
  • 現代二進位計算機,其原理到底是不是從八卦中引出的呢?
    而要做到這一點,首先得放棄大家熟悉的十進位,改用二進位。 二進位早已有:易經八卦與培根的加密法 其實二進位的概念很早以前就有了。例如易經共有六十四卦,原本是用數字標記,但到了戰國時代,易經與陰陽思想結合,卦象逐漸改用陰陽兩種符號標記,最晚在東漢時期,就定型為目前所見的線條符號。
  • 蘇聯主義網原創:謠言終結者系列(三)——莫斯科國立大學三進位計算機發展史
    因為在一般情況下,我們對問題的看法不是只有「真」和「假」兩種答案,還有一種「不知道」。在三進位邏輯學中,符號「1」代表「真」;符號「-1」代表「假」;符號「0」代表「不知道」。顯然,這種邏輯表達方式更符合計算機在人工智慧方面的發展趨勢。它為計算機的模糊運算和自主學習提供了可能。只可惜,目前電子工程師對這種非二進位的研究大都停留在表面或形式上,沒有真正深入到實際應用中去。
  • C/C+編程筆記:C語言進位詳解,二進位、八進位和十六進位!
    十進位有 0~9 共10個數字,基數為10,在加減法運算中,逢十進一,借一當十。 二進位 我們不妨將思維拓展一下,既然可以用 0~9 共十個數字來表示數值,那麼也可以用0、1兩個數字來表示數值,這就是二進位(Binary)。例如,數字 0、1、10、111、100、1000001 都是有效的二進位。
  • 「九章」量子計算機糾纏了嗎?
    「九章」量子計算機問鼎世界「量子霸權」,它比世界霸主谷歌的「懸鈴木」快一百億倍!這無疑是2020年中國科學界頭條新聞。 計算機(不管個人、超級、網絡、生物、量子)都應該由硬體系統(CPU、內存、主板、硬碟驅動器等)和軟體系統(應用程式、作業系統等)所組成,它們不僅有數值計算、邏輯計算能力,還具有存儲記憶功能。但是,我們在「九章」身上找不到任何計算機硬體元素,我們也不知道「九章」用什麼計算語言(FORTRAN?C++?)
  • 先聊算盤,再聊二進位
    中國是算盤的故鄉,在計算機已被普遍使用的今天,古老的算盤不僅沒有被廢棄,反而因它的靈便、準確等優點,在許多國家方興未艾。因此,人們往往把算盤的發明與中國古代四大發明相提並論,北宋名畫《清明上河圖》中趙太丞家藥鋪櫃就畫有一架算盤。由於珠算盤運算方便、快速,幾千年來一直是中國古代勞動人民普遍使用的計算工具。
  • 如何用一句話證明你是程式設計師?
    當然,程式設計師這個職業的獨特性要是沒有自己的專屬證明,在場的各位怕是要不服了。關於「一句話證明自己是程式設計師」,我們可是有很多話要說!我是程式設計師,如假包換!那麼,如何用一句話證明你是程式設計師呢?@Zing:借一千塊錢的話再給你 24 塊湊個整喜歡玩二進位的這位,連借錢都不放過,湊個 1024,我怕忘世界觀篇@青城:世界上有 10 種人,一種懂二進位,一種不懂小編想問,那還有剩下 8 種人呢?@天涯淪落人:PHP 是世界上最好的語言@十三月晴。:構成世界的基本元素,0 & 1。
  • 二進位、八進位、十六進位在現實當中有什麼意義?
    二進位、八進位、十六進位是有很多實際意義的,人們生活中都用十進位,不要誤以為只有十進位才有現實意義,每個進位的出現都有偉大的歷史意義。二進位二進位的出現是創歷史性的,在古代就有兩儀生四象,四象生八卦,八卦生萬物的說法,世間萬事萬物至少都有兩個狀態,比如生存/死亡、開/關、好/壞、高/低、大/小、長/短、胖/瘦等,這兩個狀態就可以使用二進位的0和1來表示。如今二進位主要運用於電子技術的數字電路當中,就比如計算機,最直接能夠識別的語言就是二進位語言。
  • 「名不副實」的神級程式設計師|Fabrice Bellard「猿傳奇|34」
    相信很多人都看過大衛·芬奇導演的《社交網絡》,在這部如「急風驟雨」般的電影中,我們似乎可以窺見一個道理——這個世界從來不缺天才,缺的是執行力與恆心,缺的是利用天分堅持理想和信念不斷創新的人。今天「猿傳奇」的主人公正是如此,他被譽為計算機科學界的「特斯拉」,因FFmpeg、QEMU等項目而聞名業內。
  • 演算天體的高智能機器:二進位計算器的超能力有哪些?
    那麼既然是計算機為基礎,那麼它的語言又是什麼呢?那就是二進位,今天恐龍哥哥帶大家走進二進位的世界,一起來學習與了解一下吧!我們平時使用的數字是幾進位?答案就是十進位。人類算數採用十進位,可能跟人類有十根手指有關。亞里斯多德稱人類普遍使用十進位,只不過是絕大多數人生來就有10根手指這樣一個解剖學事實的結果。
  • 盤點除十進位外各種奇葩進位單位,網友大喊:秦始皇牛逼!
    其實在小編看來,十進位才是中國古代最偉大的發明。十進位雖然只是一種普通的算法,但其帶來的影響卻是十分巨大的。至於原因,我們來看看其它的進位算法就明白了。一:二進位二進位是一種相對簡單的進位,由十八世紀德國數理哲學大師萊布尼茲發現。二進位的誕生仿佛是專門為計算機所準備的,因為除此之外,你很外發現身邊有任何一處會使用二進位。
  • 細思細恐,人生就像是二進位,不是0就是1
    有人認為,最早的二進位思想源於古代中國。1660年,德國路德教會神學家斯比賽爾(Theophilus Spizelius)著有《論中國文化》一書,該書詳細介紹了中國的太極陰陽八卦圖,介紹了中國的「陰陽生二一,二一生八卦,八八六十四卦」的數學模型,有人認為其中就有「二進位」思想的「種子」。
  • scratch+程小奔機器人實現「進位轉換」(十進位轉二進位)
    也就說滿十進一;而在計算機的世界裡,基礎電路只有「開/關(通/斷)」(即0/1)兩種情況,這與誕生幾千年的二進位不謀而合;例如:二進位數字110,表達的就是十進位中的6;二進位數字1111,表達的就是十進位中的15。
  • 現存最古老計算機手冊重見天日,比ENIAC要先進!
    世界上現存最古老的數字計算機「Zuse Z4」一直被放置在蘇黎世聯邦理工學院,該校的檔案管理員Evelyn Boesch的父親Rene Boesch自1956年以來一直在該校的飛機建造學院工作,他在父親的文件中找了「Zuse Z4」的使用手冊。
  • 「python學習手冊-筆記」003.數值類型
    當然,這個精度取決於我們計算機的內存大小. 「浮點數:」 浮點數在標準的CPython中,採用的是C語言的雙精度浮點數.各種進位的表示python的整數默認採用十進位進行表示. 同樣,也支持二進位,八進位,十六進位的表示.
  • 誰發現和選擇了「二進位」這個開啟人類社會數位化信息化大門的金...
    1854年,他又出版的《思維規律的研究》系統介紹了布爾代數。後來布爾代數被廣泛應用於數字電路、計算機和計算機語言。他提前約一個世紀為現代二進位的電子計算機研製奠定了數制理論基礎。今天的數字電路和計算機課程中都要教授布爾代數的內容。 1937年貝爾實驗室的喬治.斯蒂比茲(George Stibitz,1904-1995)展示了用繼電器表示二進位的機器。
  • 她是詩人拜倫的女兒,也是史上第一位程式設計師,電腦程式的創始人
    二、倔強的性格讓Ada不服輸,獨到的眼光找到不同的出路1835年,Ada嫁給了第一代勒芙蕾絲伯爵(後晉升),並且有了3個孩子。1840年,巴貝奇在各種場合遊說,都被人嘲笑,但是只有Ada和另一位名人站在一起,那位名人就是後來擔任過義大利總理的數學家閔那布利。其實這個機會被很多人呢嘲笑的原因是因為巴貝奇,雖然巴貝奇有極高的天賦,並且要用畢生來製造出一臺完美的自動化計算機器,來解決當時用《數學用表》進行人工計算比較會出現錯誤的地方。
  • 關於二進位、十進位、八進位、十六進位數據轉換計算方法詳細總結
    這個也是計算機在轉換中會產生誤差,但是由於保留位數很多,精度很高,所以可以忽略不計。那麼,我們可以得出結果將0.45轉換為二進位約等於0.0111 上面介紹的方法是十進位轉換為為二進位的方法,需要大家注意的是: 1) 十進位轉換為二進位,需要分成整數和小數兩個部分分別轉換 2) 當轉換整數時,用的除2取餘法,而轉換小數時候,用的是乘2取整法 3) 注意他們的讀數方向 因此,我們從上面的方法,我們可以得出十進位數168.125轉換為二進位為10101000.001,或者十進位數轉換為二進位數約等於