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

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 御坂美琴 閱讀(1483) 評論(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>
            久久成人在线| 正在播放亚洲一区| 欧美在线1区| 亚洲在线视频| 亚洲欧美国产另类| 午夜精品福利电影| 久久成人精品一区二区三区| 亚洲综合日韩中文字幕v在线| 亚洲欧洲午夜| 亚洲成人在线视频播放| 久久综合九色综合欧美就去吻| 欧美在线影院在线视频| 久久黄色小说| 欧美bbbxxxxx| 亚洲国产日韩欧美综合久久| 亚洲人成网站影音先锋播放| 正在播放欧美视频| 欧美一区亚洲二区| 久久亚洲一区二区| 欧美福利电影在线观看| 国产精品成人免费| 国产一区二区精品久久91| 极品尤物久久久av免费看| 亚洲人成7777| 亚洲国产精品v| 中文欧美日韩| 久久香蕉精品| 日韩香蕉视频| 久久久久国产精品一区三寸| 欧美裸体一区二区三区| 国产精品视频免费观看| 亚洲第一中文字幕| 亚洲在线日韩| 免费久久99精品国产自| 一本色道88久久加勒比精品| 久久精品综合一区| 欧美色123| 最新国产の精品合集bt伙计| 午夜久久资源| 亚洲黑丝在线| 久久精品亚洲热| 国产精品免费区二区三区观看| 亚洲第一伊人| 美国十次了思思久久精品导航| 日韩视频在线播放| 久久嫩草精品久久久精品一| 国产精品入口福利| 亚洲免费观看高清在线观看 | 久久香蕉国产线看观看av| 亚洲人精品午夜| 久久一区二区三区国产精品| 国产精品呻吟| 亚洲午夜电影在线观看| 欧美激情亚洲一区| 久久久久国内| 日韩亚洲视频在线| 欧美激情精品久久久久久黑人| 影音先锋亚洲精品| 欧美一区二视频| 中文日韩欧美| 国产精品第三页| 亚洲综合视频网| 99成人精品| 欧美激情免费在线| 亚洲国产一区二区精品专区| 欧美成人情趣视频| 老色鬼久久亚洲一区二区| 影音国产精品| 欧美激情一区二区三区不卡| 美女精品国产| 在线亚洲精品| 一二三区精品| 国产视频久久久久| 久久国产欧美日韩精品| 久久成年人视频| 黄色成人在线观看| 欧美成人一区二区在线| 欧美成人中文字幕在线| 亚洲免费av网站| 99亚洲精品| 国产色产综合色产在线视频| 久久久久五月天| 久久全球大尺度高清视频| 最新热久久免费视频| 亚洲国产欧美精品| 欧美日韩在线大尺度| 午夜精品亚洲一区二区三区嫩草| 午夜激情亚洲| 亚洲国产精品欧美一二99| 裸体歌舞表演一区二区| 欧美高清视频| 性欧美大战久久久久久久免费观看| 亚洲摸下面视频| 在线播放中文一区| 一本一道久久综合狠狠老精东影业 | 欧美在线999| 久久久久久亚洲综合影院红桃| 亚洲国产精品久久91精品| 亚洲人成欧美中文字幕| 国产精品夜夜夜| 欧美福利一区二区| 欧美视频免费在线观看| 浪潮色综合久久天堂| 欧美激情按摩| 久久九九有精品国产23| 欧美日韩精品一区二区在线播放 | 亚洲高清在线视频| 国产精品v亚洲精品v日韩精品 | 欧美日韩大片| 久久久精品国产免费观看同学 | 欧美刺激午夜性久久久久久久| 亚洲亚洲精品在线观看| 久久九九免费| 亚洲欧美制服另类日韩| 媚黑女一区二区| 午夜久久久久久| 欧美日韩亚洲一区二区三区在线观看| 欧美亚洲综合在线| 欧美日韩在线观看一区二区三区 | 99精品热视频| 久久天天躁狠狠躁夜夜av| 午夜精品成人在线视频| 欧美国产成人精品| 久久综合图片| 国产日韩在线视频| 亚洲伦理一区| 亚洲精品欧美激情| 欧美中文在线观看| 亚洲综合第一| 欧美日韩国产一区二区三区| 欧美成人一二三| 在线看日韩av| 欧美一区二区三区电影在线观看| 亚洲免费视频一区二区| 欧美日韩不卡视频| 亚洲另类在线一区| 亚洲无亚洲人成网站77777| 牛人盗摄一区二区三区视频| 蜜桃av久久久亚洲精品| 伊人影院久久| 久久综合中文字幕| 欧美高清影院| 日韩亚洲精品电影| 欧美日韩国产综合久久| 亚洲人成在线观看网站高清| 一本色道久久88综合亚洲精品ⅰ| 欧美国产丝袜视频| 亚洲狼人综合| 欧美一区二区三区啪啪| 国产精品免费一区二区三区观看| 国产精品99久久久久久人| 性欧美精品高清| 国产午夜精品全部视频播放| 先锋影院在线亚洲| 久久综合综合久久综合| 亚洲国产经典视频| 欧美三日本三级三级在线播放| 亚洲你懂的在线视频| 久久在线精品| 99国产精品视频免费观看| 国产精品视频导航| 久久午夜精品| 日韩亚洲不卡在线| 久久精品国内一区二区三区| 在线观看日韩一区| 欧美日韩性生活视频| 亚洲欧美综合精品久久成人| 欧美成年人在线观看| 亚洲一区在线免费| 国内揄拍国内精品久久| 欧美精品三级| 久久国产主播精品| 99国产精品99久久久久久粉嫩| 久久精品盗摄| 欧美视频在线观看免费| 欧美一区二区黄| 亚洲日本中文字幕免费在线不卡| 亚洲欧美国产高清va在线播| 国产综合色产在线精品| 欧美精品 日韩| 久久成人18免费网站| 99av国产精品欲麻豆| 看欧美日韩国产| 午夜在线一区二区| 99精品国产高清一区二区| 国产婷婷精品| 欧美日韩国产片| 久久一区二区精品| 亚洲免费视频中文字幕| 欧美激情第六页| 久久精品女人| 午夜精品免费在线| 一区二区三区免费看| 亚洲经典在线| 好吊日精品视频| 国产女优一区| 国产精品久久久久999| 欧美区高清在线| 欧美大片在线看| 米奇777在线欧美播放|