|
|
本帖最后由 卓然塵世間 于 2026-3-19 11:35 編輯
C語言,在編程領(lǐng)域是久負(fù)盛名的,可能沒接觸過計算機編程的人會把它看的很神秘,感覺非常的難。但其實并非如此,C語言的邏輯和運算,充其量也就是小學(xué)水平,所以不要怕它,作者盡可能的從小學(xué)數(shù)學(xué)邏輯方式帶著大家學(xué)習(xí)C語言。
4.1 二進制、十進制和十六進制
1、十進制,逢十進位,一個位有十個值:0~9,生活中到處都是它的身影。二進制就是逢二進位,它的一個位只有兩個值:0和1,但它卻是實現(xiàn)計算機系統(tǒng)的最基本的理論基礎(chǔ),計算機(包括單片機)芯片是基于成萬上億個的開關(guān)管組合而成的,它們每一個都只能有開和關(guān)兩種狀態(tài),再難找出第三個狀態(tài)了(不要辯解半開半關(guān)這個狀態(tài),它是不穩(wěn)定態(tài),是極力避免的),所以它們只能對應(yīng)于二進制的1和0兩個值,而沒有2、3、4……,理解二進制對于理解計算機的本質(zhì)很有幫助。書寫二進制數(shù)據(jù)時需加前綴0b,每一位的值只能是0或1。十六進制就是把4個二進制位組合為一位來表示,于是它的每一位有0b0000~0b1111共16個值,用0~9再加上A~F(或a~f)表示,那么它自然就是逢十六進位了,它本質(zhì)上同二進制是一樣的,是二進制的一種縮寫形式,也是程序編寫中常用的形式。書寫十六進制數(shù)據(jù)時需加前綴0x,下表是三種進制之間的對應(yīng)關(guān)系。
表4-1 進制轉(zhuǎn)換
4.jpg (147.45 KB, 下載次數(shù): 0)
下載附件
2026-3-19 11:35 上傳
2、對于二進制而言,8位二進制稱之為一個字節(jié),二進制的表達范圍值是從0b00000000~0b11111111,而在程序中用十六進制表示的時候就是從0x00到0xFF,二進制轉(zhuǎn)換十進制和十六進制的方法,二進制4位一組,遵循8/4/2/1的規(guī)律比如0b1010,那么從最高位開始算,數(shù)字大小是8*1+4*0+2*1+1*0 = 10,那么十進制就是10,十六進制就是0xA。尤其二進制轉(zhuǎn)十六進制的時候,十六進制一位剛好是和二進制的4位相對應(yīng)的,這些大家不需要強行記憶,多用幾次自然就熟練了。
3、對于進制來說,只是數(shù)據(jù)的表現(xiàn)形式,而數(shù)據(jù)的大小不會因為進制表現(xiàn)形式不同而不同,比如二進制的0b1、十進制的1、十六進制的0x01,本質(zhì)上是數(shù)值大小相等的同一個數(shù)據(jù)。在進行C語言編程的時候,只寫十進制和十六進制,那么不帶0x的就是十進制,帶了0x符號的就是十六進制。
4.2 C語言變量類型和范圍
什么是變量?變量自然和常量是相對的。常量就是1、2、3、4.5、10.6……等固定的數(shù)字,而變量則根小學(xué)學(xué)的x是類似概念,可以是1,也可以是2,想讓它是幾是程序說了算。
那么小學(xué)學(xué)的數(shù)學(xué)里邊,有這么幾類,正數(shù)、負(fù)數(shù)、整數(shù)和小數(shù)。在C語言里,除名字和數(shù)學(xué)里學(xué)的不一樣外,還對數(shù)據(jù)大小進行了限制。這個地方有一點復(fù)雜的是,在C51里邊的數(shù)據(jù)范圍和其他編程環(huán)境還可能不完全一樣,因此下邊的這個圖,僅僅代表的是C51,其他編程環(huán)境可能不一樣,大家知道有這回事就可以了。
C語言的數(shù)據(jù)基本類型分為字符型、整型、長整型以及浮點型,如圖4-1所示。
4-1.png (42.11 KB, 下載次數(shù): 0)
下載附件
2026-3-19 10:50 上傳
圖4-1 C語言基本數(shù)據(jù)類型 圖4-1中,四種基本類型,每個基本類型又包含了兩個類型。其中字符型、整型、長整型,除了可表達的數(shù)值大小范圍不同之外,都是只能表達整數(shù),而unsigned型的又只能表達正整數(shù),要表達負(fù)整數(shù)則必須用signed型,如要表達小數(shù)的話,則必須用浮點型了。
比如前面講到的閃爍LED小燈的程序,用的是
unsigned int i = 0;
這個i的取值范圍就是0~65535,在接下來的for語句里,如果把原來那個30000改成70000的話,
for(i=0;i<70000;i++);
會發(fā)現(xiàn)小燈會一直亮,而不是閃爍了,這里自然就有因超出i取值范圍所造成的問題。但要徹底搞明白這個問題,還要來了解for語句的用法。不用急,接下來很快就會學(xué)到它了。
這里有一個編程宗旨,就是能用小不用大。就是說定義能用1個字節(jié)char解決問題的,就不定義成int,一方面節(jié)省RAM空間可以讓其他變量或者中間運算過程使用,另外一方面,占空間小程序運算速度也快一些。
4.3 C語言基本運算符
小學(xué)數(shù)學(xué)學(xué)過加、減、乘、除等運算符號以及四則混合運算,而這些運算符號在C語言中也有,但是有些表達方法不一樣,并且還有額外的運算符號。在C語言編程中,加、減、乘、除和取余數(shù)的符號分別是:+、-、*、/、%。
C語言有一個很重要的賦值運算符“=”,前邊程序有使用過。在C語言里,“=”代表的意思是賦值,而不是等于。最經(jīng)典的一個例子就是a=1;b=2;如果寫成a = a+b;這個在數(shù)學(xué)里的運算是a等于a加b,是個錯誤結(jié)論;而在c語言里的意思是把a加b的結(jié)果送給a,那么運算完了之后的結(jié)果是a等于3,b還等于2。
說到這里就不得不說C語言的比較運算符“==”。這個在C語言里是進行是否等于判斷的關(guān)系運算符,而“!=”就是不等于的關(guān)系運算符。
此外,C語言中還有額外的兩個運算符++和--,一個是自加1,一個是自減1,下面選++來講一下。
++在用法上就是加1的意思,注意是變量自己加,比如b++的意思就是b=b+1,而在編程的時候有兩種常用的方式先加和后加。比如
unsigned char a = 0; unsigned char b = 0;
那么
a = ++b;
其整個運算過程是先計算b=b+1,那么b就等于1了,然后再運行a=b,運行完畢后a=1,b=1。如果寫成
a=b++;
那么運算過程就是先執(zhí)行a=b;然后再執(zhí)行b=b+1,執(zhí)行完的結(jié)果就是a=0,b=1。
這些運算符這里就是簡單介紹一下,而后邊會通過使用實例來鞏固這些知識。其他一些運算符,在使用過程中也會陸陸續(xù)續(xù)介紹到。
|
|