补补算术基础:编程中的进制问题
關于二進制、八進制、十六進制以及它們與十進制的關系和轉換。詳細地請參考下面的文章(寫得還不錯)
http://www.d2school.com/bcyl/bhcpp/newls/ls06.htm
在我們編程過程中,用得最多的是十進制,然后是十六進制,他們的轉換在c#中主要用兩個方法
Convet.ToString() 和 Convert.ToInt32()
?
我總結幾點:(以下黑體,斜體字是我的總結摘要)
6.1 為什么需要八進制和十六進制?
關于這一點,首先因為進制越大,表示一個數字就越短。計算機只認識二進制,但二進制我們不好理解,它太長,而且很不直觀。八進制和十六進制因為都是2的整數冪(八進制是2^3,而十六進制是2^4),所以他們本身很好轉換為二進制。
但是為什么我們通常用的又不是八進制和十六進制,而是十進制呢?這又是一個問題。
6.2 二、八、十六進制數轉換到十進制數
- 6.2.1 二進制數轉換為十進制數
- 6.2.2 八進制數轉換為十進制數
- 6.2.3 八進制數的表達方法
- 6.2.4 八進制數在轉義符中的使用
- 6.2.5 十六進制數轉換成十進制數
- 6.2.6 十六進制數的表達方法
- 6.2.7 十六進制數在轉義符中的使用
總結來說,這些進制轉換為十進制的算法類似如下
八進制1507換算成十進制。
第0位 7 * 80 = 7
第1位 0 * 81 = 0
第2位 5 * 82 = 320
第3位 1 * 83 = 512?? +
--------------------------
????????????? 839(十進制)
就是說把這個數的不同位的值乘上一個與當前進制有關的權數。第0位就乘以進制的0次方,第1位就乘以進制的1次方,以此類推。
6.3 十進制數轉換到二、八、十六進制數
- 6.3.1 10進制數轉換為2進制數
- 6.3.2 10進制數轉換為8、16進制數
?
反過來,要把十進制轉換為其他的進制,算法大致如下
將商繼續除以對應的進制(例如2,8,16),直到商為0。最后將所有余數倒序排列,得到數就是轉換結果。
例如要把十進制中的6轉換為2進制,按照下面的方式運算,然后將余數倒過來,就是110.
|
?
還有一個關鍵問題,如何在編碼中表示一個八進制或十六進制呢?例如給你一個數字:123。你怎么知道是八進制,還是十六進制,還是十進制呢?
為了以示區分,八進制要加上一個0(零)的前綴,例如123應該書寫為0123;而十六進制要加上一個0x的前綴,例如123應該書寫為0x123
關于轉義字符的問題,一般忽略不考慮
?
6.4 二、十六進制數互相轉換
6.5 原碼、反碼、補碼
原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼
比如 00000000 00000000 00000000 00000101 是 5的 原碼。
反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。
取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)
比如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反碼。
反碼是相互的,所以也可稱:
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互為反碼。
補碼:反碼加1稱為補碼。
也就是說,要得到一個數的補碼,先得到反碼,然后將反碼加上1,所得數稱為補碼。
比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。
那么,補碼為:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在計算機中表達為:11111111 11111111 11111111 11111011。轉換為十六進制:0xFFFFFFFB。
從本質上說,只有十進制有正負之分,其他進制都沒有。那么如果要表示負數怎么辦呢?就是先用二進制取得原碼,然后取反碼,然后取補碼。然后再根據情況轉換為其他進制。
那么還有一個問題,就是如何表示小數?
?
6.6 通過調試查看變量的值
6.7 本章小結
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的补补算术基础:编程中的进制问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET常用语句(转载)
- 下一篇: Our Town