tft每日頭條

 > 生活

 > c語言進制轉換筆記

c語言進制轉換筆記

生活 更新时间:2024-09-27 13:37:04

計算機使用二進制來存儲和運算數據

二進制數位上的數字隻能是0和1

一個字節包含8位二進制位

二進制和十進制一樣,隻是一種數字的表示形式

1.二進制和十進制的轉換

整數:

(1)二進制轉換成十進制

二進制數字的每個數位有一個編号,最右邊的編号是0,向左一次遞增

二進制轉換成十進制的結果就是将每個數位上的1乘以2的編号次方,再将所有的結果相加

1234 = 1X10^3 2X10^2 3X10^1 4X10^0 1010111 = 1X2^6 1X2^4 1x2^2 1x2^1 1x2^0 = 64 16 4 2 1 = 87 01110101 = 2^6 2^5 2^4 2^2 2^0 = 64 32 16 4 1 = 117

注:二進制數字中相鄰的1之間有倍數關系,左邊的1是右邊的1的兩倍

(2)十進制轉二進制

方法1:

将十進制的數字拆分成多個非重複的2的整數次方之和,再将每個拆分的結果單獨轉換成二進制,最後将所有的結果合并

79 = 64 8 4 2 1 = 2^6 2^3 2^2 2^1 2^0 = 1000000 1000 100 10 1 = 1001111

方法2:

将十進制的數字不停地除以2,保留餘數,直到商為0,然後把所有的餘數倒着寫,得到的結果就是對應的二進制轉換結果

餘數 103 1 51 1 25 1 12 0 6 0 3 1 1 1 0 ------------停止 結果為 1100111 175 1 87 1 43 1 21 1 10 0 5 1 2 0 1 1 0 結果為 10101111

補充:

使用上述方法得到的是二進制的原碼

計算機中存儲整數實際上存儲的是二進制的補碼

非負數的補碼就是原碼,負數的補碼是他相反正數的原碼取反加1得到

-103 0110 0111 取反------> 1001 1000 加1------> 1001 1001

小數:

(1)二進制轉換成十進制

整數部分直接使用上面整數的轉換方法,小數部分的每個數位也有一個編号,最左邊的小數數位的編号是-1,向右依次遞減

小數二進制轉換成十進制的結果就是将每個數位上的1乘以2的編号次方,再将所有的結果相加

1011011.1011 = 2^6 2^4 2^3 2^1 2^0 2^-1 2^-3 2^-4 = 64 16 8 2 1 0.5 0.125 0.0625 = 91.6875

(2)十進制轉二進制

整數部分直接使用上面整數的轉換方法,将小數部分不停乘以2,每次保留個位并且清0,直到沒有小數部分為止,記錄的個位依次就是二進制的小數部分

137.3725 整數部分:10001001 小數部分:0.0101111.... 0.3725 0 0.745 1 0.49 0 0.98 1 0.96 1 0.92 1 0.84 1 ...... 0

2.浮點數的存儲

浮點數在計算機中的存儲類似于科學計數法

1486.31 --------- 1.48631 X 10^3

首先将小數轉換成二進制,把二進制的小數用類似于科學計數法的方法表示處理

137.375 ------> 10001001.011 ------> 1.0001001011 X 2^7

在計算機中,記錄以上浮點數分别記錄 符号,階碼,尾數

c語言進制轉換筆記(C語言之進制)1

浮點數在計算機中的存儲

假設符号位叫S,階碼叫E,尾數叫M,那麼對應的浮點數的值V

V = (-1)^S X M X 2^E

浮點數存儲的特别規定:

(1)對于尾數M來說,個位永遠是1,不需要記錄他,尾數M隻記錄小數點之後的部分

1.0001001011 ------> 0001001011

(2)對于階碼E來說,由于指數可正可負,需要對階碼進行修正

階碼不全為0或者不全為1,階碼E減去一個數得到真實指數,float類型減去127,double需要減去1023,比如一個float數的階碼為129,對應的指數是129-127 = 2

(3)階碼E全為0,這個時候尾數M不再需要加上前面的1,這種方法用來表示 /-0,或者接近于0的很小的數字

(4)階碼E全為1,如果尾數M全為0,此時表示 /-無窮大,如果尾數M不全為0,此時表示該浮點數非法(NaN)

3.八進制

八進制數位上的數字為0~7,八進制是二進制的簡寫形式

把二進制表示形式從右到左每三個數位分為一組,每一組用一個0-7之間的數字代替,這樣的得到的結果就是數字的八進制表示形式

在C代碼中可以直接使用八進制,但是必須在數字前加0

10 101 111 = 0257

printf打印數字的八進制形式使用占位符%o

4.十六進制

十六進制是二進制的簡寫形式,每個數位上的值是0~15,其中0-9直接用數字,10~15使用字母a~f

把二進制表示形式從右到左每四個數位分為一組,每一組用一個0-9或a-f之間的内容代替,這樣的得到的結果就是數字的十六進制表示形式

在C代碼中可以直接使用十六進制,但是必須在數字前加0x

1010 1111 = 0xaf

printf打印數字的十六進制形式使用占位符%x(小寫) %X(大寫)

配套視頻:深度解析C語言

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved