青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C/C++圖形圖像的世界

圖形與游戲編程

常用鏈接

統計

積分與排名

Blog

最新評論

傻瓜學習C語言進制轉換

最近受網友的邀請,就寫一篇入門的教學文章。不過對于已經有一定實力水平的人來說,入門級的東西反而對于他(她)們來說不容易解釋清楚,我也想挑戰一下自己,看看我能把一些基礎問題怎么解釋能讓智商80的人也能看明白(雖然這樣說有點夸張),所以文章的標題就叫做“傻瓜學習C語言進制轉換”,不過也不是沒有要求的,要求是,看本文的時候,請你一定要按順序看,并且要確定你會寫這樣一個c程序:輸入一個int,分解出它的個位,十位,百位(提示:要用’%'求模運算和’/'整除運算)。。。。。。

1.數值與進制
數值與進制是兩個不同的東西。數值是什么?100,200這種并不是數值。
什么是數值?古代的時候,人們記數,有一個物品就記一塊石頭,或者有11個物品,就打11個繩結,這就是數值,如果你要表示1000,那你還真的需要打1000個繩結來表示。可問題就是,這樣子你會累死,為了不用累死,于是他們發明了另一種表達方式:準備兩種不同的石頭A和B,有一個,那就用一塊A石頭表示,兩個就用兩塊A表示,如果太多了,比如10個,就用一塊B石頭來表示有10個A石頭,比如AAAAABB表示25個。但是,如果表達的數值更大,那就再多準備一種石頭C,每10個B石頭就用一個C石頭來表示,比如AABCC表示212。于是,這樣就可以大大減少所需要的石頭的數目,而這,就是進制。
進制是數值的一種表示方式

2.數值與進制的轉化
進制是為了表示一個數值,如果是每10個進一,那么就是我們熟悉的10進制,否則,如果是每k個進一,那就是k進制,比如我們的時間,是每60秒記1分鐘,這就是60進制。然后,怎么把一個用特定進制的表示,得到它的數值呢?很簡單,比如上文說的AABCC,首先,有兩個A,分解得AA + BCC,就是2 + BBC,然后,1個B就是10個A,于是就是AA + AAAAAAAAAA + AAAAAAAAAA + C,然后一個C等于10個B,就是AA + AAAAAAAAAA + AAAAAAAAAA + BBBBBBBBBB,這樣一直拆下去,直到全部是A為止,你就得到實際的數值了,實際的數值就是A的個數,記住這一點,數值和進制是兩碼事。

然后,反過來,怎么把一個數值轉化為特定進制呢?很簡單,按照進制的定義,比如現在有數值AAAAAAAAAAAAAAAAAAAAAAA,然后,要轉成10進制,那么我們每10個分一分組:AAAAAAAAAA + AAAAAAAAAA + AAA,然后,把10個A用B來表示,得到:B + B + AAA,如果B有10個,那再把它換成C表示。那么,如果你明白了以上方法,你就得到一個最基本的進制轉換手段,就是先化為數值,再重新用另一個進制表示。比如10進制的13,要化成二進制,那么,就是BAAA -> AAAAAAAAAAA -> AA AA AA AA AA AA A 這時,換一個符號,每兩個A用一個M表示,那么就是MM MM MM A,再每兩個M用一個N表示,得到NN N A,再每兩個N用一個P表示,得到P N A。而在這里,一個P等于8個A,一個N等于4個A,所以P + N + A你可以驗算出8 + 4 + 1,等于原來的數值。而這種表示方法,就和羅馬數字很相似,羅馬數字里,用I表示1,用V表示5,用X表示10,于是18就用XVIII表達,用一個字母多次重復來表達一個數值。

后來,為了能更方便書寫,因為字母數量是有限的,無法表達更大的數字,書寫方式改用阿拉伯數字寫在不同的位置來表達,于是就是我們今天的10進制數字。比如剛剛的例子,BAAA,有一個B,于是在十位寫1,然后有三個B,在個位寫3,也就是B的個數,組合起來就是13,這是十進制的情況。如果是二進制,剛剛我們得到的結果是PNA,注意這里沒有M,相當于0個,而如果我們用二進制寫,那就有四個位,個位有一個A,記1,第二位相當于M的個數,是0,組合起來是01,第三位是N,記1,組合是101,第四位有一個P,再組合就是1101,于是這就是10進制的13,化為二進制的結果。

3.進制的特點
問你,3638除以10的余數是多少?給你一秒種思考時間,多少?如果這個你不能馬上說出來,那你就要反省了。結果應該是8,直接看個位不就對了。那么3638除以10的商呢?再給你一秒。。。。。。。。。。。。。。。。。。。這個答錯的話要重讀小學了,答案當然是363.8,如果把這個數取整,不要小數部分,那就是363。小學的時候你就應該知道,對一個數乘以10或者除以10這種計算是超簡單的,因為我們用的是10進制。類似的,問一下你,經過60個5秒是多少分鐘多少秒?再給你一秒思考時間,要毫不猶豫的回答我。你可別去計算60*5=300,這是多余的。答案是5分鐘,時間我們用的60進制,那么乘以60只要改一下單位就足夠了,肯定是對的。再問你,10分鐘分成60份是多少秒?你必須立即回答我是10秒。
我們推廣到任意k進制,按這個特點,k進制下,乘以k或者除以k的運算是超級簡單的,比如8進制的123,乘以8肯定是1230,除以8就是12.3,相當于在移動小數點而已。于是,k進制下乘除k就是移動小數點。而除以k求余數的話,像剛剛的8進制的123除以8,就等于12余3,就是要得到個位上的數字,同時得到原來的數舍棄掉個位的結果。這個性質非常的重要!除法的本質是什么?其實除以k是得到被除數在k進制下的個位數(余數),和小數點左移的結果(商)。

4. C下實現數值轉化為進制
好,現在回到程序,給你一個int n,要把它的各位上的數字取出來,按上面的性質,那就很簡單了,先得到個位,n%10(這個’%'是求余運算),然后小數點左移,n = n / 10; 然后不斷循環這個過程,如下代碼:

int n = 2456;
while (n > 0)
{
    printf("%d,", n % 10);
    n = n / 10;
}

輸出結果是”6,5,4,2,”,好好領悟一下這段代碼。給你五分鐘時間。每一次%10就是取出個位,每一次/10就是丟掉個位。
而如果把輸出的結果里的數字,逆過來看,就是”2456″。

在這里,那個int所表示的,就是一個數值,剛剛我們的代碼所做的事就是把這個數值,一位一位的分解出來。
而事實上,這個過程就是把數值轉化為特定進制的過程。剛剛就是把數值轉化為10進制。
如果把剛剛的代碼改為:

int n = 13;
while (n > 0)
{
    printf("%d,", n % 2);
    n = n / 2;
}

沒錯,輸出結果是”1,0,1,1″,就是剛剛把13化為二進制的例子,每一次%2就是取出二進制下的個位,每一次/2就是丟掉二進制下的個位。
只要把那個次序反過來,就得到1101,就是13化為二進制的結果。在你真正搞明白了除法的本質后,那么,數值轉化為以k進制表示那是一件很簡單的事。

5. 進制轉化為數值
這部分我不打算講,很多人對這個比起前面的內容來說容易理解很多,直接用進制的定義就已經很好辦了,沒什么太難理解的東西。

6. 作業
編寫一個程序,輸入三個整數n A B,表示把A進制的n,轉換為B進制,并輸出。
樣例:
輸入 輸出
11 8 10 9
129 10 2 10000001
22 3 6 12

假定輸入的A和B都在2-10這個范圍,超出范圍的不用去處理,輸入的n保證在int范圍內。

posted on 2011-12-27 01:41 御坂美琴 閱讀(1491) 評論(1)  編輯 收藏 引用

評論

# re: 傻瓜學習C語言進制轉換 2011-12-27 02:21 OwnWaterloo

炮姐好……  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品一二三区| 亚洲国产精品久久久久婷婷884| 美国成人直播| 欧美日韩在线播放三区四区| 免费高清在线视频一区·| 国产精品亚洲综合天堂夜夜| 一区二区三区在线视频播放 | 久久成人精品电影| 欧美日韩高清不卡| 欧美激情精品久久久久久大尺度| 国产日韩精品一区二区| 999在线观看精品免费不卡网站| 亚洲韩日在线| 久久综合色婷婷| 久久夜精品va视频免费观看| 国产欧美日韩综合一区在线观看 | 日韩一级大片在线| 久久综合综合久久综合| 麻豆精品国产91久久久久久| 国产日韩欧美一区| 欧美一区成人| 久久久.com| 国产一区二区三区的电影| 亚洲欧美中文字幕| 欧美一区在线视频| 国产欧美亚洲日本| 欧美一区午夜视频在线观看| 欧美一区二区在线视频| 国产精品视频专区| 欧美亚洲一区二区三区| 欧美在线影院| 激情久久久久久久| 猛男gaygay欧美视频| 亚洲欧洲精品成人久久奇米网| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲欧美日本视频在线观看| 亚洲男人的天堂在线aⅴ视频| 国产精品国内视频| 午夜在线视频观看日韩17c| 久久久精品日韩欧美| 精品福利电影| 欧美高潮视频| 亚洲一本大道在线| 久久久国际精品| 亚洲精品123区| 欧美日韩亚洲一区二区三区在线观看 | 亚洲一区影音先锋| 久久一区二区三区四区| 亚洲黄色一区| 国产精品成人久久久久| 久久激五月天综合精品| 欧美激情一区在线| 亚洲字幕在线观看| 在线播放中文字幕一区| 欧美激情一区二区三区在线视频观看| 中文欧美日韩| 久久午夜激情| 一区二区三区免费在线观看| 国产偷久久久精品专区| 免费试看一区| 亚洲女女女同性video| 欧美+日本+国产+在线a∨观看| 99精品视频免费观看视频| 国产乱码精品一区二区三| 久久一区二区三区四区| 一本一本久久| 免费在线亚洲欧美| 亚洲欧美日韩综合aⅴ视频| 在线观看视频一区二区| 欧美视频网址| 你懂的一区二区| 午夜精品成人在线| 亚洲精品免费在线| 蜜桃久久av一区| 小黄鸭精品密入口导航| 亚洲人成小说网站色在线| 国产视频一区三区| 国产精品超碰97尤物18| 久久综合给合久久狠狠色| 亚洲欧美日韩视频一区| 亚洲国语精品自产拍在线观看| 久久久999国产| 亚洲一区二区伦理| 亚洲精品一区在线| 精品粉嫩aⅴ一区二区三区四区| 国产精品久久久久三级| 欧美久久久久久| 久久一综合视频| 久久精彩免费视频| 亚洲综合色噜噜狠狠| 亚洲乱码日产精品bd| 欧美激情第一页xxx| 久久综合九色综合欧美就去吻| 午夜精品久久久久久久99水蜜桃| 99精品热6080yy久久| 亚洲欧洲视频| 亚洲激情另类| 亚洲国产成人精品久久久国产成人一区| 国产人成一区二区三区影院| 国产精品欧美久久久久无广告| 欧美午夜在线| 国产精品扒开腿做爽爽爽视频| 欧美日韩午夜在线视频| 欧美日韩精品久久久| 欧美精品国产精品| 欧美成人高清| 欧美激情女人20p| 欧美激情在线免费观看| 欧美激情精品久久久久久| 欧美国产精品va在线观看| 欧美不卡视频一区发布| 欧美va天堂| 欧美国产日韩一区二区| 欧美久久成人| 欧美性猛交xxxx乱大交退制版 | 一本久久知道综合久久| 一区二区免费在线视频| 国产精品99久久久久久久vr| 亚洲一区二区三区在线观看视频| 亚洲一区久久| 欧美在线高清视频| 美女免费视频一区| 亚洲福利一区| av成人免费观看| 亚洲综合不卡| 久久一区精品| 欧美日韩mv| 国产精品一区二区久久精品| 国产日产高清欧美一区二区三区| 狠狠色伊人亚洲综合网站色| 亚洲大片在线观看| 一个色综合av| 久久精品视频免费观看| 欧美成人午夜激情视频| 亚洲精品乱码久久久久久久久 | 国产欧美精品| 亚洲第一色在线| 亚洲一区3d动漫同人无遮挡| 欧美一区二区三区四区视频| 欧美成人有码| 亚洲色图制服丝袜| 久久久www| 欧美日韩国产精品| 国产亚洲精品aa| 亚洲精品综合在线| 欧美一区免费| 亚洲二区在线视频| 亚洲欧美久久久| 欧美大片国产精品| 国产欧美一区二区精品秋霞影院 | 91久久黄色| 欧美一区二区三区视频| 欧美极品一区| 狠狠狠色丁香婷婷综合久久五月| 亚洲精品综合在线| 久久久在线视频| 中日韩视频在线观看| 久久综合九色欧美综合狠狠| 国产精品日韩一区| 日韩天堂在线观看| 免费看精品久久片| 亚洲一区二区三区久久| 欧美国产一区二区在线观看| 国产一区二区欧美日韩| 亚洲一区二区三区在线播放| 亚洲高清自拍| 久久久久久一区二区| 国产精品免费网站在线观看| 亚洲精品国产精品乱码不99按摩| 久久婷婷久久| 欧美一区二区三区视频在线观看| 欧美日韩免费看| 亚洲精品久久嫩草网站秘色| 美女91精品| 欧美一区二区视频在线观看| 国产精品乱人伦一区二区| 99亚洲精品| 91久久精品www人人做人人爽| 久久女同互慰一区二区三区| 国产精品美女久久久| 亚洲男人第一网站| 夜夜嗨av一区二区三区免费区| 欧美精品国产精品| 亚洲伦理中文字幕| 亚洲国产精品嫩草影院| 美女露胸一区二区三区| 亚洲高清中文字幕| 女同性一区二区三区人了人一| 久久久av水蜜桃| 在线观看三级视频欧美| 久久久久一区| 久久精品国产亚洲精品| 国产丝袜一区二区三区| 久久久久天天天天| 久久久精品久久久久| 黄色综合网站| 欧美成人一区二区三区在线观看 | 亚洲第一伊人| 欧美高清视频一区二区三区在线观看 | 久久不射网站|