1樓:Joooooel Bo
0和1就是一種二進位制
數制只是一種載體,十進位制的事二進位制為什麼做不了?不要侷限於思維定式,二進位制只是數制的另一種形態,表達的實體是相同的
而在計算機中,其實和我們在現實中計算是乙個道理,但是計算機記憶體是有限的,只能儲存有限位的0和1,所以表示精度是有限的。
但是我們日常生活中的思維和計算機計算的過程還是有一些出入的
究其根本,計算機的思維沒有我們抽象,對於加法乘法我們可以依靠經驗直接心算,有時甚至會兩三位一起算,但是計算機依靠電子電路實現計算,抽象級別很低,十進位制需要再變成為狀態表示更加簡單的二進位制,複雜加法乘法需要分解為逐位&簡單的邏輯運算(與或非)的組合實現,也就是計算機計算和我們日常生活最大的不同是引入了布林代數這一體系
布林代數的建立,為數字電子技術奠定了理論基礎。布林代數告訴我們———無論是加法還是乘法都可以通過基本邏輯運算的不同組合來實現(與,或,非),當然具體的組合還是比較複雜的,可以去看數字電子設計的書,會很詳細
具體的實現:與和或對應在電路中就是串聯和併聯,非對應反相器(利用P-N結半導體性質,可以構建兩種導通方向相反的電路元件)然後用高電平和接地點平來表示0和1,之後的電子管、MOSFET管的發明和整合技術的發展讓其實現起來越來越高效(摩爾定律)
總而言之就是,計算機的記憶體裡有很多位可以儲存0和1,有n位就能表示2^n種狀態,然後由很牛的資訊學家來研究一種高效的編碼系統應用在這麼多狀態中(比如說補碼就是很接地氣的一種編碼系統,可以為整數域運算實現一套完美自洽的體系),就能實現跟我們認知相似的邏輯運算和數字運算
深入了解具體的實現,建議學習數位電路
2樓:jjppp
這個問題在《問題求解》這門課有專門的解釋,很可惜俺沒有上過這門課......
更高深的理論可以搜搜圖靈機的相關資料,或者看看《計算理論導引》這本書?
3樓:高厲害
我們不提那些「討厭的物理實現」,也不只拋「專業術語」,就簡單講一下邏輯上的基本思想。
首先,我們可以用邏輯上連續的「01容器」來表示乙個二進位制數。
而對兩個二進位制數,我們可以設計乙個用來相加的電路。
那麼對兩個二進位制數的每一位,
1 + 1 = 0 進 1
1 + 0 = 1 進 0
0 + 0 = 0 進 0
同時還要考慮上一位的進製,那麼上邊的就變成了
1 + 1 + 1 = 1 進 1
1 + 1 + 0 = 0 進 1
1 + 0 + 0 = 1 進 0
0 + 1 + 1 = 0 進 1
0 + 1 + 0 = 1 進 0
0 + 0 + 0 = 0 進 0
我們可以用「邏輯電路」設計出這種有輸入輸出的模組,可以想象有這麼乙個電路組成的模組,輸入上乙個模組的近位及兩個加數字,就可以輸出當前位的計算我去啊淒淒切切去啊~結果和進製。
這就是硬體加法的基本思想。
有了加法,我們可以遵循同樣的設計步驟來設計硬體減法的邏輯,就可以實現減法。不過,科學家通過設計一種巧妙的「數集的對映關係」,將減法的邏輯用加法表示了,這個東西叫「補碼」(這個東西幾句話講不清,是一種巧妙的設計)。
乘法是是加法的擴充套件,我們只需要讓乘數在被乘數的每一位上累加即可得到結果。
除法也一樣,最基本的實現思想就是試商,商的每一位是 0 還是 1,我們可以先試乙個 1,如果發現商過了,就把商過的餘數恢復到之前的狀態,然後再把這一位商改為 0。這個在我們教材上叫「恢復餘數法」,繼續用數學方法深究下去,這個方法還可以被優化。
關於補碼,大概就是,在任何乙個數量級下,兩個數相加可能超過該數量級而進製,這時候把進製丟棄,就能得到減法結果,不過得到這個結果的前提是,這兩個數都是用補碼表示的。
補碼將乙個數量級的所有數一分為二,一半表示正數,一半表示負數,在這個數集中的正負數相加後會直接進製,丟掉進製後就是 0。
4樓:墲穹蕪燼
首先,我們知道1代表開,或者充電了,0代表關,或者斷點了
所以,我們採用二進位制(這是基於硬體原因採用的,誰說電腦為什麼不用三進製我打死他)
加減法就是不斷充電,或者不斷斷電,add和sub
乘除法這邊有點特殊,分為兩種
1.移位
我們由二進位制的性質可以知道,數值往左移位相當於乘以2^移的位數,向右便是除以2^移的位數
例子:100(4) 左移1位 => 1000(8) 右移一位 => 10(2)
2.加和減
加本身這個數字N次等於這個數字乘N,減本身這個數字N次直到不能再減相當於除法,然後會有乙個餘數,便是減後留下來的數
當然,現在計算機用的除法比我講的更加高階,用到了乙個MAGIC_NUM,是他們算出來的,非常強,我只能用公式算,但是推不出公式,這裡不講
關於邏輯運算,可以查查布林代數
(注:以下不是布林代數的使用符號,只是介紹概念,主要是非的符號我不會打,乾脆就直接這樣了)
首先介紹下與或非
1.&(與)
1 & 1 = 1 (有些情況下會存在&和&&,比如cmd,&和&&有區別,&&才是與)
2.|(或)
1 | 0 = 1
0 | 1 = 1
3.!(非)
!1 = 0
!0 = 1
其次還有異或
兩者不同是真,則輸出為真,兩個相同則輸出為假(這似乎原本是個硬體問題然後被布林代數證明了)電路就不魔性畫圖了,自己查
看到底下有人發了半加器和全加器,我這裡簡略說一下吧(以下我是直接複製之前的筆記,可能非常奇怪,懶得打了,還請諒解)
半加器由乙個異或運算單元與乙個與運算單元組成
1 true
= (1)0 =false
1 true
將與運算單元插入異或的兩個入口
與運算單元會輸出1
稱為半加器,可以讓1+1輸出1
半加器被封裝成乙個單元
有兩個輸入為A、B
兩個輸出為總和、進製
處理超過1+1的運算時使用
當乙個運算進製時,需要運算3個bit
+1(1)
1 0(2) 1
+ 1 0(3) 1
1 0
所以有3個輸入,A、B、C
有兩個輸出,總和、進製
也可以使用兩個半加器與乙個或門製成全加器
Aor1
= or =進製
B A ——or2
C B 總和
即異或計算總和,or計算進製
若輸入1 1 1
則上方輸出10,上面的1進入or1
下面的0進入下方半加器的A,然後第三個1進入半加器的B
1和0輸出1在or2,在進製處是1,總結處是0
或運算除非兩者都不同,否則就是true,於是是進製
若輸入1 0 1
上方1和0輸出1進入or1,0進入下面半加器A
C輸入1進入下面半加器B,0和1輸出1進入or2,0進入總和
然後or內1和0輸出true,依舊是進製
題主別打死我啊
我也想打死自己
還有暫存器,這是計算機可以儲存數字的核心,懶得說明,自己查吧
除此之外還有前面說的補碼、原碼、反碼這類的關係,是關於有符號位有關的
簡單說說,符號位就是+、-
第一位數字為1則這個數是負數,為0則是正數(有符號位情況下)
例:假設這個資料結構只有4bits
1001 就是 -1
0001 就是 1
這也是為什麼總是出現某某遊戲數字大到一定程度後會突然讓你從暴富變成暴負的原因
好了,超出我一天打字量了,摸魚了_(:з」∠)_
5樓:一杯劉
這個是個好問題呀,我上大學時就很好奇這個問題,結果學了乙個學期才大概明白…
簡單來說,計算機只認識0,1是因為對應電路開,關兩種狀態,那麼利用與或非異或等邏輯門可以模擬出加法嘛?
結論是必須的,這就是半加器和全加器的實現方式那麼減法呢?如何利用0,1表示負數?
答案就是補碼,利用補碼可以把減法轉換成加法加減乘除都可以利用演算法轉換成加法和移位操作大概的步驟就是這樣,每乙個細節涵蓋的東西挺多的,需要你自己去搜尋學習了
6樓:給你宇宙
聚沙成塔,集腋成裘
計算機的二進位制運算有:與,或,非,異或等,還有位移,有這幾個運算結合就能創造一切。
就像dna那個,一共就四種(就是高中學的,具體叫啥忘了),噼里啪啦一堆組合,就能創造出貓狗人
一切的複雜都是由簡單的排列組合而成的
相關的課程是數位電路
相關的學科是布林代數
7樓:acebear
Belleve:電腦是如何知道1+1=2的?
計算機內「1和0」的計算和傳輸,如果發生錯誤會怎樣?
韓意 訊號完整性就是描述互聯訊號質量的,電訊號都會按規定的信令標準傳輸的,也就是說在某個電平範圍內會被認為是高電平1,另乙個電平範圍會被認為是0,每個信令標準都是有雜訊容限的,將雜訊控制在容限之內信令就能完整地傳輸。 沙田 4.完全取決於具體情況,你說的都有可能,直接系統崩潰也是可能的,不過我覺得最...
計算機的1和0是如何變成聲音,並調節聲音大小的?
Scort 我說乙個比較簡單的吧,PWM調製的蜂鳴器 時鐘分頻得到各種頻率的新波形,這些新波形對應著各自的音調占空比的大小,決定了音量大小 這樣,僅僅1bit的頻寬就實現了音調和音量的調節 數碼訊號 1,0 變模擬訊號 聲音 的核心轉變發生在 DAC 數模轉換器,digital to analog ...
計算機會認為( b)是(0 b)還是(( 1) b)?
就是乙個 取負 操作,不是減也不是乘。在高階語言中常表現為 x 的形式。語法樹中也是一元操作 x 取正 運算子 亦如此,此時 和 就不是加和減了 在一般機器底層也是乙個單引數的取負指令 當然也有些例外的 對於整數 浮點數等基本型別基本如此,有部分機器架構例外 那些架構中底層確實是用0去減 而對於 支...