官术网_书友最值得收藏!

3.4 C51的變量類型

數(shù)據(jù)類型是C51語言最基本的組成部分。在C51中,每個變量在使用之前必須定義其數(shù)據(jù)類型。C51語言中的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和聚合數(shù)據(jù)類型,這里首先介紹基本數(shù)據(jù)類型。

3.4.1 C51的數(shù)據(jù)類型

C51的基本數(shù)據(jù)類型有整型(int)、浮點(diǎn)型(float)、字符型(char)、無值型(void)。在基本數(shù)據(jù)類型中,除void類型外,其前面均可以有各種修飾符。修飾符用來改變基本類型的意義,以便更準(zhǔn)確地適應(yīng)各種情況的需求。

常用的修飾符有signed(有符號)、unsigned(無符號)、long(長型符)、short(短型符)。在C51語言中,所有數(shù)據(jù)類型的字長和取值范圍如表3.2所示。

表3.2 C51語言的數(shù)據(jù)類型

注意

表中各個數(shù)據(jù)類型組合的字長和取值范圍是假定CPU的字長為16bit。

從表中可以看出,修飾符signed、short、long和unsigned可以修飾字符型和整型兩種基本類型。此外,修飾符long還可用于float型。

說明

C51除了繼承了標(biāo)準(zhǔn)C語言中基本的數(shù)據(jù)類型外,又兼具其本身的特點(diǎn),如在C51語言中int和short,float和double具有相同的取值范圍和含義。

一般來說,編譯環(huán)境對整數(shù)類型的默認(rèn)定義是有符號數(shù),singed修飾符可以省略。為了使用方便,C51編譯程序允許使用整型簡寫形式,如下所示。

?short int簡寫為short

?long int簡寫為long

?unsigned short int簡寫為unsigned short

?unsigned int簡寫為unsigned

?unsigned long int簡寫為unsigned long

另外,某些編譯環(huán)境允許將unsigned用于浮點(diǎn)型,如unsigned float。但這種數(shù)據(jù)類型并不通用,在程序移植時會出現(xiàn)問題,建議一般不要采用。

此外,C51語言還提供了幾種聚合類型(aggregate types),包括數(shù)組、指針、結(jié)構(gòu)、聯(lián)合(共用體)、枚舉和位域。這幾種聚合類型將在后面章節(jié)中陸續(xù)介紹,這里首先介紹常用的基本類型。

3.4.2 整型變量

整型變量是整數(shù)類型的數(shù)據(jù)。整型變量是最常用的數(shù)據(jù)類型。整型變量的定義格式是“類型說明符變量標(biāo)識符,變量標(biāo)識符...”。示例如下。

        int                  a, b;                             //定義a、b為短整型變量
        long                 c, d;                             //定義c、d為長整型變量

其中,類型說明符與變量標(biāo)識符之間至少有一個空格。最后一個變量標(biāo)識符必須以“;”結(jié)尾。整型變量的前面可以加上不同的修飾符,整型變量的類型如表3.3所示。

表3.3 整型變量的類型

說明

在有符號型數(shù)據(jù)的二進(jìn)制表示中,字節(jié)最高位表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負(fù)數(shù)。

另外,在C51中定義變量時,允許同時定義多個相同類型的變量,各變量間用逗號間隔。變量定義必須放在變量使用之前,一般位于函數(shù)的開頭。整型變量使用的示例程序如下。

        #include <stdio.h>                                    //頭文件

        void main( )                                          //主函數(shù)
        {
              int   a,b,c,d;                                  //定義a , b , c , d 為整型變量
              a=15; b= -30;                                   //賦初值
              unsigned int x;                                 //定義x為無符號整型變量
              x=25;                                           //賦初值
              c=a+x; d=b+x;                                   //變量運(yùn)算
              printf("a+x=%d, b+x=%d\n",c,d);                 //打印輸出結(jié)果
        }

該程序可以在Keil μ Vision3集成開發(fā)環(huán)境中運(yùn)行,執(zhí)行的結(jié)果如下。

        a+x=40, b+x=-5

在本例中,int型數(shù)據(jù)與unsingned int型數(shù)據(jù)進(jìn)行相加減的算術(shù)運(yùn)算,由此可以看出,不同類型的整型數(shù)據(jù)之間可以進(jìn)行算術(shù)運(yùn)算。

3.4.3 浮點(diǎn)型變量

浮點(diǎn)型變量是用于表示包含小數(shù)點(diǎn)的數(shù)據(jù)類型。浮點(diǎn)型變量的一般定義格式是“類型說明符 變量標(biāo)識符,變量標(biāo)識符...”,示例如下。

        float       a, b;                                      //定義a、b為單精度浮點(diǎn)型變量
        double     c, d;                                       //定義c、d為雙精度浮點(diǎn)型變量

同整型變量一樣,浮點(diǎn)型變量也可以同時定義多個。C51支持3種浮點(diǎn)型變量類型,即float類型、double類型和long double類型。但是在C51中不具體區(qū)分這3種類型,它們都被當(dāng)作float類型對待,因此,這3種浮點(diǎn)類型的精度和取值范圍相同。浮點(diǎn)類型變量的字長為4個字節(jié),共32位二進(jìn)制數(shù),取值范圍為3.4x10-38~3.4x10+38。浮點(diǎn)型變量的示例程序如下。

        #include <stdio.h>                                    //頭文件
        void main( )                                          //主函數(shù)
        {
              float a;                                        //定義a為單精度浮點(diǎn)型變量
              double b;                                       //定義b為雙精度浮點(diǎn)型變量
              a=8976.1538;                                    //賦值
              b=6950.2692;
              printf("a=%f\nb=%f\n",a,b);                     //打印輸出結(jié)果
        }

該程序可在Keil μ Vision3集成開發(fā)環(huán)境中運(yùn)行,執(zhí)行結(jié)果如下。

        a=8976.154000
        b=6950.269000

在本例中,a為單精度浮點(diǎn)型變量,有效位數(shù)是7位,因此最后四舍五入為8976.154。b為雙精度浮點(diǎn)型變量,但在C51中仍按float型處理,所以有效位數(shù)也是7位,因此最后四舍五入為6950.269。

注意

在C51中,浮點(diǎn)型數(shù)據(jù)均為有符號浮點(diǎn)數(shù),而沒有無符號浮點(diǎn)數(shù),字節(jié)最高位表示數(shù)據(jù)的符號,所以浮點(diǎn)型變量的有效位數(shù)是7位。

3.4.4 字符型變量

在信息的表示和傳遞中,經(jīng)常用到字符以及文字的表示。字符型變量就是用來存放單個字符的變量類型。字符型變量的定義格式是“類型說明符變量標(biāo)識符,變量標(biāo)識符...”。示例如下。

        char                 a:                        //定義a為有符號字符變量
        unsigned char     b;                           //定義b為無符號字符變量

在C51中,可以定義兩種類型的字符型變量為有符號字符變量char和無符號字符變量unsigned char。在C51中,字符型變量在操作時將按整型變量處理。字符是以ASCII碼方式表示的,其字長為1個字節(jié),所以有符號字符型變量的取值范圍為-128~127,無符號字符型變量的取值范圍是0~255。如果某個變量被定義成char,則表明該變量是有符號的,即它將轉(zhuǎn)換成有符號的整型變量。字符型變量使用的示例程序如下。

          #include <stdio.h>                                                    //頭文件

          void main()                                                             //主函數(shù)
          {
                char c1,c2,c3,c4;                                               //定義字符變量
                c1=65;                                                             //賦值
                c2=66;                                                             //賦值
                c3='A';
                c4='B';
                printf("c1=%c\nc2=%c\nc3=%c\nc4=%c",c1,c2,c3,c4);      //輸出結(jié)果
          }

該程序可在Keil μ Vision3集成開發(fā)環(huán)境中運(yùn)行,執(zhí)行結(jié)果如下。

          c1=A
          c2=B
          c3=A
          c4=B

程序中,c1、c2、c3、c4被定義為字符變量。其中,c3和c4分別賦值兩個字符,因此輸出結(jié)果為字符。c1和c2分別賦值十進(jìn)制整數(shù)65和66,因?yàn)樽址鸄和B的ASCII碼值分別為65和66,因此程序中使用“%c”來表示輸出時將輸出其對應(yīng)的字符。對c1和c2的賦值相當(dāng)于以下的賦值語句。

          c1 = 'A';
          c2 = 'B' ;

在實(shí)際使用中,常會需要存放一個字符串,這時就需要定義一個字符型數(shù)組,將字符串存放到該數(shù)組中來表示。定義字符串?dāng)?shù)組的示例程序如下。

          #include <stdio.h>                                    //頭文件

          void main()                                           //主函數(shù)
          {
                char str[5];                                    //定義字符型數(shù)組
                str [0]='T';                                    //賦值
                str [1]='e';                                    //賦值
                str [2]='s';                                    //賦值
                str [3]='t';                                    //賦值
                printf("str=%s",str);                           //打印輸出結(jié)果
          }

在程序編譯時,系統(tǒng)將留出str [0]到str [4]共5個字符的連續(xù)空間,其中只有前4個可以自由賦值,最后一個用來存放字符串終止符“NULL”,即“\0”。

這段程序可在Keil μ Vision3集成開發(fā)環(huán)境中運(yùn)行,執(zhí)行結(jié)果如下。

          str=Test

注意

終止符“NULL”是編譯程序默認(rèn)自動加上的,程序中絕對不能為最后一個賦值。如果對最后一個進(jìn)行賦值,將導(dǎo)致程序的錯誤輸出。

3.4.5 指針型變量

指針型變量是指向變量所存放地址的數(shù)據(jù)類型。在C51中,指針型變量的定義格式是“類型說明符變量標(biāo)識符,變量標(biāo)識符...”,示例如下。

        int         *i;                              //定義整型指針變量
        float       *f;                              //定義浮點(diǎn)型指針變量
        char        *c;                              //定義字符型指針變量
        struct     *stu;                             //定義結(jié)構(gòu)型指針變量
        union       *uni;                            //定義聯(lián)合指針變量

指針型變量是一種特殊的數(shù)據(jù)類型,從上面可以看出,根據(jù)所指的變量類型不同,指針型變量可以分為整型指針、浮點(diǎn)型指針、字符型指針、結(jié)構(gòu)型指針和聯(lián)合指針。指針型變量的字長由所指向的變量類型決定。這里以字符型指針變量為例介紹指針型數(shù)據(jù)的使用,程序示例如下。

        #include <stdio.h>                            //頭文件

        void main()                                   //主函數(shù)
        {
              char a1;                                //定義字符型變量
              char *p;                                //定義字符型指針
              a1='A';                                 //變量賦值
              p=&a1;                                  //將變量a1的地址賦給p
              printf("*p=%c",*p);                     //輸出地址p中所存的數(shù)據(jù)內(nèi)容
        }

這段程序可在Keil μ Vision3集成開發(fā)環(huán)境中運(yùn)行,執(zhí)行結(jié)果如下。

        *p=A

在該程序中,首先給字符型變量a1賦值'A',然后將a1的地址賦給字符型指針變量p。這樣變量p所指向的地址內(nèi)存放的數(shù)據(jù)是'A'。

3.4.6 無值型變量

無值型變量是一個特殊的類型,其字節(jié)長度為0。無值型變量的定義格式是“類型說明符 變量標(biāo)識符,變量標(biāo)識符...”,示例如下。

        void        *buf;                             //buf被定義為無值型指針

在C51中,無值型變量主要用于以下兩個方面。

?定義一個同一類型的指針,該指針可根據(jù)需要動態(tài)分配內(nèi)存。

?在自定義函數(shù)時,明確地表示這個函數(shù)不返回任何值。程序示例如下。

        #include <stdio.h>                                   //頭文件

        void Fun1(int a)                                     //定義一個無返回值的函數(shù)
        {
              printf("the number is %d",a);                  //輸出
        }
        void main()                                          //主函數(shù)
        {
              int i;                                         //定義變量
              i=12;                                          //賦值
              Fun1(i);                                       //調(diào)用函數(shù)
        }

這段程序可在Keil μ Vision3集成開發(fā)環(huán)境中運(yùn)行,執(zhí)行結(jié)果如下。

        the number is 12

在該程序中,先使用void自定義一個無返回值的函數(shù),在主函數(shù)中調(diào)用該函數(shù)并輸出結(jié)果。

主站蜘蛛池模板: 富平县| 十堰市| 彭山县| 桃园市| 毕节市| 晋中市| 星座| 泗水县| 吉隆县| 满洲里市| 重庆市| 井研县| 六盘水市| 沙田区| 沁阳市| 谷城县| 当涂县| 渝北区| 肃南| 漳浦县| 社旗县| 临高县| 安达市| 城固县| 苗栗市| 土默特右旗| 饶河县| 长顺县| 子长县| 永登县| 香港| 阜南县| 申扎县| 张家港市| 太康县| 南阳市| 卓尼县| 孝昌县| 泰安市| 楚雄市| 丘北县|