日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

码农翻身摘录

發布時間:2024/1/1 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 码农翻身摘录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三次握手:驗證雙方發信和收信能力問題
?第一次握手:京城發信,縣衙收到了,此時縣衙就會明白,京城的發信能力和自己的收信能力沒有問題。
?第二次握手:縣衙發信,京城收到了,此時京城就會明白,京城的發信和收信能力都是沒有問題的,縣衙的發信和收信能力也都是沒有問題的。但是縣衙還不知道自己的發信能力如何,所以需要第三次握手。
?第三次握手:京城發信,縣衙收到了,其實第二握手的時候京城已經知道雙方的收信、發信能力都是沒有問題的,這次回應的目的只是消除縣衙對自己的發信能力和京城的收信能力的擔憂而已。
為什么需要補碼
?熱愛編程的張大胖在大學時最煩的一門課之一就是《數字電路》 , 他一直覺得和編程沒什么關系。有一次課程設計是實現一個加法器, 大胖使用邏輯電路, 費了九牛二虎之力才實現了4位的加法。

這4個二進制位能表達的數有16個, 從0 到15 :

大胖用他的加法器計算了一下 8+3 : 8+3 = 1000 + 0011 = 1011 = 11

還不錯, 再計算一下 9+7 :

9+8 = 1001 + 1000= 0001

怎么變成了1 ? 奧, 我這兒只有4位,能支持的最大數字就是 15 , 而9+8的結果是 10001 (十進制16),計算結果溢出, 最高位的1被丟棄了!
其實這也符合要求, 大胖順利的交了作業。

用加法來表示減法
可是下一次課還是課程設計,老師竟然要求在這個加法器上實現減法 ,這可把大胖給難住了, 在加法器上實現減法,真是個變態的需求。
遇到了問題,張大胖自然會“跪求”好基友, 電腦高手Bill。
Bill 說:“這個要求一點都不變態,用加法器同時實現加法和減法,能極大的節省CPU的電路設計。 ”
“你就說該怎么實現吧”
Bill說:“我先給你說一下原理,在你定義的4位二進制中,一共可以表達16個數我們引入一個‘補數 '的概念,例如 3的補數 是 13,4的補數是12,5 的補數是11,當你計算7減去3 的時候,可以變成 7加上3 的補數,即 7 + 13 ”
“可是7+13 是20,但是7-3 等于4 啊”
“20其實已經超出你4位二進制能表達的16個數了,已經溢出了,對吧,所以20還得減去16 ,就是4 了。你用二進制算一下。”

7-3 = 0111- 0011 = 0111 + 1101(二進制13) = 10100

10101已經溢出了, 去掉最高位是 0100 ,就是十進制4 了。
“果然不錯” 張大胖說 “這讓我想到了鐘表,現在是7點, 我想讓它回到4點, 有兩種辦法, 一種方法是讓時針后退 3 格,另外一種方法是讓時針前進9格, 前進到12點的時候, 其實就相當于溢出了,舍棄掉。 "
Bill 說, “看來你已經Get了,數學上有個詞叫做求模, 說的就是這個運算,還以時鐘為例” 。

向后退3格: 7 - 3 = 4 向前進9格 : (7 + 9) mod 12 = 4 向前進21格: (7+9+12) mod 12 = 4 向前進33格: (7+9+12+12) mod 12 = 4 .....

“這是一種以進為退的策略” Bill 接著說 " 用這種辦法就把減法變成了加法"
“但是我怎么得到所謂的補數呢?從3 怎么得到13 呢”
“這很簡單, 對于二進制, 前輩們想出了一個異常簡單,又特別適合計算機的算法, 對二進制數的所有位取反,然后加1 ”。

“神奇啊, 前輩們竟能想出這么巧妙的辦法 !”

“這就是所謂的 補碼了” Bill總結道。
Bill 問道:“剛才咱們說的都是整數的加減法, 負數你考慮了沒有啊? 大胖?”
“我也剛剛想到,現在我知道 7-3 可以換算成 7+ 13 了,如果是3 - 7 呢?”
“負數一引入,系統就變得更復雜了,首先你得用一個標志位來表示整數還是負數吧: ”

張大胖說: “明白了,最高位的0 表示正數,1 表示負數,真正有效的數字只剩下3位了,正數的范圍是從1 到7 , 負數的范圍從 -1到-7 ,不過這里出現了兩個零! 一個正0 ,一個負0 ,這不妥吧。”

“先別急,之前說到減法可以變成加法,秘密就是用補碼,例如8-3 相當于8+(-3)的補碼 , 那我們完全可以把表格1中的負數用補碼表示,然后把那個負0 特別當做 -8來處理”。

Bill 接著說: “按照上面的表格,現在我們來計算一下 7-4 , 7是 0111,-4是 1100,注意我們把符號位也算進去了,兩者相加: “讓我試試4-7, ” 張大胖說,4是0100 ,-7是1001,兩者相加:

“妙啊” 張大胖不禁贊嘆起來, “把負數用補碼表示,不但減法變加法, 連符號位都可以參與運算了!”
“ 是啊, 我們通過補碼能極大的簡化電路的設計, 你一定要記住,

在計算機內部,是使用補碼來表示二進制數, 如果是一個正數, 補碼就是它本身, 如果是個負數, 需要把除了符號位之外的二進制數進行取反加一的操作"

"此外, 我想你也能總結出來, 你這個4位的系統如果只表示無符號數(沒有負數的話) , 它的范圍是[0 , 2 ^ 4] ,即[0, 16] ;
如果要想表達有符號數(負數和整數), 它的范圍就是[-2^3, 2^3-1] , 即[-8, 7] 。 在高級編程語言像C, Java ,你經常會看數據類型的取值范圍, 你應該明白其中的原理了。

總結

以上是生活随笔為你收集整理的码农翻身摘录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。