• <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>

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

            圖形與游戲編程

            常用鏈接

            統(tǒng)計(jì)

            積分與排名

            Blog

            最新評(píng)論

            傻瓜學(xué)習(xí)C語(yǔ)言進(jìn)制轉(zhuǎn)換

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

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

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

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

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

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

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

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

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

            在這里,那個(gè)int所表示的,就是一個(gè)數(shù)值,剛剛我們的代碼所做的事就是把這個(gè)數(shù)值,一位一位的分解出來。
            而事實(shí)上,這個(gè)過程就是把數(shù)值轉(zhuǎn)化為特定進(jìn)制的過程。剛剛就是把數(shù)值轉(zhuǎn)化為10進(jìn)制。
            如果把剛剛的代碼改為:

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

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

            5. 進(jìn)制轉(zhuǎn)化為數(shù)值
            這部分我不打算講,很多人對(duì)這個(gè)比起前面的內(nèi)容來說容易理解很多,直接用進(jìn)制的定義就已經(jīng)很好辦了,沒什么太難理解的東西。

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

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

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

            評(píng)論

            # re: 傻瓜學(xué)習(xí)C語(yǔ)言進(jìn)制轉(zhuǎn)換 2011-12-27 02:21 OwnWaterloo

            炮姐好……  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            91精品婷婷国产综合久久| 91亚洲国产成人久久精品| 久久最新免费视频| 久久久久亚洲AV片无码下载蜜桃| 97久久国产亚洲精品超碰热| 一本久久免费视频| 欧美久久一区二区三区| 色综合色天天久久婷婷基地| 久久精品国产亚洲精品2020| 无码国内精品久久综合88| 久久久久久国产精品免费免费 | 久久99精品久久久久久9蜜桃| 久久婷婷成人综合色综合| 久久久久久久久66精品片| 亚洲国产精品综合久久网络 | 精品永久久福利一区二区| 久久久久亚洲AV无码专区首JN| 久久精品九九亚洲精品| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 久久国产亚洲精品| 久久精品成人免费国产片小草| 久久狠狠高潮亚洲精品| 久久99精品国产麻豆宅宅| 久久99精品久久久久久野外| 成人妇女免费播放久久久| 久久亚洲AV无码精品色午夜| 狠狠色伊人久久精品综合网| 国产精品久久久久久久久鸭| 亚洲精品无码久久不卡| 欧美亚洲日本久久精品| 久久精品国产99久久久香蕉| 99久久精品免费观看国产| 久久99中文字幕久久| 久久夜色撩人精品国产| 久久亚洲欧洲国产综合| 国产99久久久国产精品小说| 久久这里只精品国产99热| 久久99久久99精品免视看动漫| 久久亚洲熟女cc98cm| 亚洲人成伊人成综合网久久久| 97精品伊人久久大香线蕉app|