無論什麼程式語言,其**最終都會被編譯解釋成計算機可讀取和執行的二進位制資料。
其中,數字在二進位制資料中可劃分成原碼、補碼和反碼。
原碼:數值前面增了一位符號位
例如:10 和 -10 的二進位制表示如下:
# 10 的原碼
0000 1010
# -10 的原碼
1000 1010
其中,最高位表示符號位,0 表示正數,1 表示負數。
反碼:在原碼的基礎上,符號位不變,其餘位取反
繼續以上邊的 -10 為例:
# -10 的反碼
1111 0101
補碼:負數的補碼為反碼加1,正數的補碼就是原碼本身
# 10 的補碼
0000 1010
# -10 的補碼
1111 0110
在計算機中,數字是以補碼的形式進行儲存和執行的。
相對於原碼,使用補碼作為計算機的實際儲存方式有 2 個優勢:
可以統一數字 0 的表示。因為 0 既不是正數也不是負數,如果使用原碼表示,最高位的符號為難以確定用 0 還是 1 表示。
如果用補碼表示,我們先把 0 當作正數處理,其補碼(原碼本身)表示如下:
0000 0000
我們再把 0 當作負數表示,其補碼(反碼 + 1)表示如下:
# 原碼
1000 0000
# 反碼
1111 1111
# 補碼
0000 0000
從上邊可以看到,以補碼表示 0,無論從正數還是負數角度處理,最終數字的二進位制表示都是一樣的。
簡化加減法的計算。將減法當成加法進行計算,實現正數和負數加法的統一。
我們以 2 + 3 為例:
2 的補碼: 0000 0010
3 的補碼: 0000 0011
結果: 0000 0101
結果中的0000 0101
就是十進位制的 5。
我們以 2 - 3 為例:
2 的補碼: 0000 0010
-3 的補碼: 1111 1101
結果: 1111 1111
結果中的1111 1111
就是十進位制中的 -1。
從上邊的例子中我們可知,使用補碼表示數字時,我們無需區分正負數,只需將補碼進行加法執行即可得出結果。
關於浮動你不得不知道的知識
首先你得知道浮動屬性出現的 初衷是 為了實現文字環繞的效果 只是後來被用在了 不正當的方面 以下是我總結的16條關於 浮動的規則。1.css允許浮動任何元素,且浮動的元素會從正常的文件流中脫離出來,不過它仍然會影響布局。2.浮動元素周圍的外邊距不會合併,不管周圍的margin是否是浮動元素的都不會合...
程式猿不得不知道的業內「黑話」
程式猿的隊伍越來越龐大了,這裡整理了一些開發周邊的各個渠道的 黑話 趕快瞅瞅吧,別下次聽到時還是一頭霧水了!程式猿 沒必要做那麼複雜 複雜的我不會 外面大家都是這麼做的 我直接複製的 你這個需求不清晰 我不想做 目前技術實現不了 我不想做 那個 有句話 不知 專案要延期了 你告訴我輸什麼我自己來 你...
程式猿不得不知道的業內「黑話」
程式猿的隊伍越來越龐大了,這裡整理了一些開發周邊的各個渠道的 黑話 趕快瞅瞅吧,別下次聽到時還是一頭霧水了!程式猿 沒必要做那麼複雜 複雜的我不會 外面大家都是這麼做的 我直接複製的 你這個需求不清晰 我不想做 目前技術實現不了 我不想做 那個 有句話 不知 專案要延期了 你告訴我輸什麼我自己來 你...