日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【零基础学习iOS开发】【02-C语言】05-进制

發(fā)布時(shí)間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【零基础学习iOS开发】【02-C语言】05-进制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一講簡單介紹了常量和變量,這講補(bǔ)充一點(diǎn)計(jì)算機(jī)的基礎(chǔ)知識---進(jìn)制。

我們先來看看平時(shí)是如何表示一個(gè)整數(shù)的,最常見的肯定是用阿拉伯?dāng)?shù)字表示,比如“十二”,我們可以用12來表示,其實(shí)這種表示方式是基于一種叫做“十進(jìn)制”的計(jì)數(shù)方式。“進(jìn)制”是一種計(jì)數(shù)方式,編程中常見的進(jìn)制有4種:十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制。也就是說,同一個(gè)整數(shù),我們至少有4種表示方式。

一、十進(jìn)制

1.概念

十進(jìn)制是我們最熟悉、最常用的一種計(jì)數(shù)方式,它有兩個(gè)特點(diǎn):由0、1、2….9十個(gè)基本數(shù)字組成;運(yùn)算規(guī)則是“逢十進(jìn)一”。

?

2.運(yùn)算

所謂“逢十進(jìn)一”,似乎在小學(xué)數(shù)學(xué)中都已經(jīng)學(xué)過了,也就是當(dāng)數(shù)值滿十時(shí),就要向前進(jìn)一位

個(gè)位數(shù)為9+1,滿十了,十位數(shù)就進(jìn)一。

?

二、二進(jìn)制

1.概念

二進(jìn)制是計(jì)算機(jī)內(nèi)部使用的一種計(jì)數(shù)方式,它有兩個(gè)特點(diǎn):由0、1兩個(gè)基本數(shù)字組成;運(yùn)算規(guī)則是“逢二進(jìn)一”。

?

2.細(xì)節(jié)

1> 有人可能會問:為什么二進(jìn)制里面沒有2~9這些數(shù)字呢?都說了,逢二進(jìn)一,因此當(dāng)數(shù)字滿二的時(shí)候就會進(jìn)位。

2> 如果我寫個(gè)1010,你能看出它是二進(jìn)制還是十進(jìn)制么?為了跟其他進(jìn)制區(qū)分開來,書寫二進(jìn)制數(shù)的時(shí)候,需要以0b或者0B開頭。比如0b1010是個(gè)二進(jìn)制數(shù),而1010則還是我們熟悉的十進(jìn)制數(shù),就是“一千零一十”

?

3.運(yùn)算

做個(gè)簡單的運(yùn)算吧,比如1+1

個(gè)位數(shù)是1+1,值滿二了,于是十位數(shù)要進(jìn)一。因此,在二進(jìn)制中:1 + 1 = 0b10,這里的0b10表示的是十進(jìn)制中的“二”,并不是“十”。

?

以此類推,11 + 1 = 0b100

?

?

4.二進(jìn)制轉(zhuǎn)為十進(jìn)制

1> 用二進(jìn)制表示數(shù)值,雖然簡單、方便,但是不容易閱讀,比如隨便給出個(gè)二進(jìn)制數(shù)0b110111101010,你能立刻看出它表示的是什么數(shù)值嗎?一般需要將二進(jìn)制數(shù)轉(zhuǎn)為十進(jìn)制數(shù)后才能知道代表的什么數(shù)值。

進(jìn)制里面有個(gè)“基數(shù)”的概念,基數(shù)是用來計(jì)算數(shù)值的,比如十進(jìn)制的基數(shù)是10,因此十進(jìn)制是這樣算數(shù)的:

1230 = 0 * 100 + 3 * 101 + 2 * 102 + 1 * 103 = 0 * 1 + 3 * 10 + 2 * 100 + 1 * 1000

二進(jìn)制的基數(shù)是2,以此類推:

0b1011 = 1 * 20 + 1 * 21 + 0 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11

因此二進(jìn)制數(shù)0b1011表示的數(shù)值是十進(jìn)制中的11

?

2> 一位二進(jìn)制數(shù)能表示的最大值是1,而n位二進(jìn)制數(shù)所能表示的最大值是0b111...1111,也就是說n位二進(jìn)制數(shù)都是1,那么它的十進(jìn)制數(shù)值為:

1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 + .... + 1 * 2n-1 = 2n - 1

因此,n位二進(jìn)制數(shù)所能表示的最大值是2n - 1。也就是說,4位二進(jìn)制數(shù)能表示的最大值是0b1111,十進(jìn)制數(shù)值為:24 - 1 = 15;5位二進(jìn)制數(shù)能表示的最大值是25 - 1 = 31。

?

三、八進(jìn)制

1.概念

八進(jìn)制有兩個(gè)特點(diǎn):由0~7八個(gè)基本數(shù)字組成;運(yùn)算規(guī)則是“逢八進(jìn)一”。

?

2.細(xì)節(jié)

由于十進(jìn)制和八進(jìn)制中都包含了0~7,為了區(qū)分開來,在書寫八進(jìn)制數(shù)的時(shí)候,需要在前面加個(gè)0。比如076是個(gè)八進(jìn)制數(shù),76則是個(gè)十進(jìn)制數(shù)。

?

3.運(yùn)算

個(gè)位數(shù)是7+1,值滿八了,于是十位數(shù)要進(jìn)一。因此,在八進(jìn)制中,7 + 1 = 010。010則表示十進(jìn)制中的“八”,而不是“十”

?

4.八進(jìn)制轉(zhuǎn)十進(jìn)制

八進(jìn)制的基數(shù)是8,因此027計(jì)算出來就是十進(jìn)制中的23

027 = 7 * 80 + 2 * 81 = 7 * 1 + 2 * 8 = 23

?

5.二進(jìn)制轉(zhuǎn)八進(jìn)制

不難發(fā)現(xiàn)一個(gè)十進(jìn)制數(shù)可以表示的最大值是9,而一個(gè)八進(jìn)制數(shù)可以表示的最大值是7,恰好3個(gè)二進(jìn)制數(shù)可以表示的最大值0b111也是7。因此,我們可以用一個(gè)八進(jìn)制數(shù)來代替3個(gè)二進(jìn)制數(shù)。

0b11110011 = 0b 011? 110? 011? = 0363

如果是八進(jìn)制轉(zhuǎn)為二進(jìn)制,那就反過來,用3位二進(jìn)制數(shù)來表示1位八進(jìn)制數(shù)

025 =?0b 010? 101 = 0b10101

?

四、十六進(jìn)制

1.概念

十六進(jìn)制有兩個(gè)特點(diǎn):由0~9和A~F組成,A~F分別表示10~15;運(yùn)算規(guī)則是“逢十六進(jìn)一”。

?

2.細(xì)節(jié)

由于十進(jìn)制、八進(jìn)制、十六進(jìn)制中都包含了0~7,為了區(qū)分開來,在書寫十六進(jìn)制數(shù)的時(shí)候,需要在前面加個(gè)0x或者0X。比如0x76是個(gè)十六進(jìn)制數(shù),076是個(gè)八進(jìn)制數(shù),76則是個(gè)十進(jìn)制數(shù)。

?

3.運(yùn)算

個(gè)位數(shù)是B+5,也就是11+5,值滿十六了,于是十位數(shù)要進(jìn)一。因此,在十六進(jìn)制中,B + 5 = 0x10。0x10則表示十進(jìn)制中的“十六”,而不是“十”

?

4.十六進(jìn)制轉(zhuǎn)十進(jìn)制

十六進(jìn)制的基數(shù)是16,F表示十進(jìn)制中的15,因此0x2F計(jì)算出來就是十進(jìn)制中的47

0x2F = 15 * 160 + 2 * 161 = 15 * 1 + 2 * 16 = 47

?

5.二進(jìn)制轉(zhuǎn)十六進(jìn)制

一個(gè)十六進(jìn)制數(shù)可以表示的最大值是15,恰好4個(gè)二進(jìn)制數(shù)可以表示的最大值0b1111也是15。因此,我們可以用一個(gè)十六進(jìn)制數(shù)來代替4個(gè)二進(jìn)制數(shù)。

0b11110011 = 0b 1111? 0011? = 0xF3

如果是十六進(jìn)制轉(zhuǎn)為二進(jìn)制,那就反過來,用4位二進(jìn)制數(shù)來表示1位十六進(jìn)制數(shù)

0x25 =?0b 0010? 0101=0b100101

?

五、進(jìn)制總結(jié)

1.一個(gè)整數(shù)“十二”的4種表示方式分別如下:

十進(jìn)制:12

二進(jìn)制:0b1100

八進(jìn)制:014

十六進(jìn)制:0xC

?

2.其實(shí)也可以利用Mac中的計(jì)算器軟件來測試進(jìn)制之間的轉(zhuǎn)換。

設(shè)置計(jì)算機(jī)的顯示模式為“編程器”

先選擇10進(jìn)制,然后輸入12,底部顯示的二進(jìn)制數(shù)為1100,這里省略最前面的0b

選擇八進(jìn)制,顯示為14,這里省略了最前面的0

選擇十六進(jìn)制,顯示為0xC

?

六、變量與進(jìn)制

1.上一講學(xué)習(xí)了變量的使用,簡單回顧一下

1 int main() 2 { 3 int a = 10; 4 return 0; 5 }

在第3行定義了一個(gè)變量a,存儲的是十進(jìn)制整數(shù)10。其實(shí),這個(gè)變量a在內(nèi)存中是以二進(jìn)制數(shù)的形式存儲的,10的二進(jìn)制形式是1010。

?

2.除了十進(jìn)制整數(shù),還可以將其他進(jìn)制的整數(shù)賦值給整型變量

1 int main() 2 { 3 int a = 0b110; // 十進(jìn)制數(shù):6 4 5 int b = 021; // 十進(jìn)制數(shù):17 6 7 int c = 12; // 十進(jìn)制數(shù):12 8 9 int d = 0x1D; // 十進(jìn)制數(shù):29 10 11 return 0; 12 }

上面的代碼中,分別將4種不同進(jìn)制的數(shù)值賦值給不同的整型變量。對應(yīng)的十進(jìn)制數(shù)值已經(jīng)寫在右邊的注釋中。它們最終都是以二進(jìn)制的形式存儲在內(nèi)存中。

?

七、printf的簡單使用

1.用printf輸出整型變量

前面給變量賦值了各種進(jìn)制的整數(shù),究竟這些整數(shù)的十進(jìn)制形式為多少呢?我們自己可以換算出來,不過總是自己去算,太麻煩了,我們可是程序員,應(yīng)該利用程序幫我們算出來。前面已經(jīng)學(xué)過printf("Hello World");語句的作用是在屏幕輸出Hello World這一串內(nèi)容。我們其實(shí)也可以利用printf將一個(gè)變量輸出到屏幕,看看這個(gè)變量的值究竟為多少。

這個(gè)printf看起來好像是你往它的小括號里面放什么內(nèi)容,它就會在屏幕上輸出什么內(nèi)容,但是printf的用法有講究的,像下面的寫法就是錯(cuò)誤的:

1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 0x1D; 6 7 printf(a); 8 9 return 0; 10 }

有人可能會疑惑,為什么有時(shí)需要#include <stdio.h>,有時(shí)又不需要#include <stdio.h>?這個(gè)暫時(shí)不去詳細(xì)討論,你先記住只要用了printf,就要添加#include <stdio.h>。

在第5行定義了變量a,初值為一個(gè)十六進(jìn)制數(shù)。在第7行想通過printf輸出變量a的數(shù)值,但是第7行的寫法是錯(cuò)誤的。 要想利用printf輸出一個(gè)整型變量,就必須先說明輸出的格式,比如是以十進(jìn)制格式輸出還是以八進(jìn)制格式輸出?

?

下面的寫法才是正確的:

1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 0x1D; 6 7 printf("變量a的值為%d", a); 8 9 return 0; 10 }

注意看第7行,左邊雙引號括住的內(nèi)容代表著要輸出到屏幕的內(nèi)容,不過并不是直接將 "變量a的值為%d" 輸出到屏幕。%d是一種格式符,它的意思是用右邊變量a的值替代%d的位置進(jìn)行輸出,并且以十進(jìn)制格式輸出。說白了,格式符是用來控制輸出格式的。

程序在終端上的運(yùn)行結(jié)果是:

可以發(fā)現(xiàn),輸出了"變量a的值為29",0x1D的十進(jìn)制數(shù)值確實(shí)是29,說明這個(gè)輸出是正確的。但是這個(gè)29跟后面的英文連在一起了,非常難看,這時(shí)候我們可以在%d的后面加一個(gè)\n表示回車換行。

1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 0x1D; 6 7 printf("變量a的值為%d\n", a); 8 9 return 0; 10 }

注意第5行的改變:在%d的后面加了個(gè)\n,表示將變量a以十進(jìn)制格式輸出后進(jìn)行回車換行。

這時(shí)候的運(yùn)行結(jié)果是:

這樣就可以明顯地看到這個(gè)29了

?

2.printf支持的格式符

除開%d,printf還支持很多格式符,如下表所示(紅色表示常用),這份表格的內(nèi)容不用去死記,用到時(shí)再回來查資料即可

接下來簡單演示一下%x的使用,它的功能是以十六進(jìn)制形式輸出整數(shù)

1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 17; 6 7 printf("%x\n", a); 8 9 return 0; 10 }

在第5行定義了變量a,存儲的是十進(jìn)制整數(shù)17,在第7行讓變量a以十六進(jìn)制形式輸出,運(yùn)行結(jié)果是:

可以發(fā)現(xiàn),十進(jìn)制整數(shù)17以十六進(jìn)制形式輸出就是11,這是正確的。

?

3.printf可以同時(shí)輸出多個(gè)數(shù)值

看下面代碼,利用printf同時(shí)輸出多個(gè)數(shù)值

1 #include <stdio.h> 2 3 int main() 4 { 5 int age = 17; 6 7 int no = 10; 8 9 printf("age = %d, no = %d\n", age, no); 10 11 return 0; 12 }

注意看第9行,左邊的雙引號內(nèi)有2個(gè)%d,age的值會代替第一個(gè)%d進(jìn)行輸出,no的值會代替第二個(gè)%d進(jìn)行輸出,并且都是以十進(jìn)制形式輸出。輸出結(jié)果:

?

4.printf也可以輸出常量

1 #include <stdio.h> 2 3 int main() 4 { 5 6 printf("輸出的常量為%d\n", 11); 7 8 return 0; 9 }

注意第6行,右邊的是一個(gè)整型常量11,它會代替%d的位置進(jìn)行輸出。輸出結(jié)果:

用了半天,似乎還是沒有說到printf究竟是個(gè)什么東西,這個(gè)會放到后面詳細(xì)討論,它還有其他復(fù)雜用法。

轉(zhuǎn)載于:https://www.cnblogs.com/mjios/archive/2013/05/24/3067219.html

總結(jié)

以上是生活随笔為你收集整理的【零基础学习iOS开发】【02-C语言】05-进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。