「C語言」數據類型及混合運算與類型轉換


    深入學習C語言時,有必要先了解一下數據類型的概念,以及它們之間的混合運算與類型轉換。

    本篇文章便是根據《C語言程序設計教程》和在線翻閱資料后整理而出。(練習題將逐步更新)

 

目錄:

    一、概述

    二、類型修飾符

    三、各種數據類型介紹

    四、不同類型數據間的混合運算與類型轉換轉換

    五、練習

 

一、概述

 

    程序所能處理的基本數據對象被划分成一些組或一些集合。它們都采用同樣的編碼方式,對它們能做同樣的操作。把程序中具有這樣性質的集合,成為數據類型。CPU對不同的數據類型提供了不同的操作指令

    C語言中的類型按其組成可以分為簡單類型和構造類型,按是否預定義了類型名字和值集可以分為基本類型和非基本類型,按是否加了類型限定符可以分為限定類型和非限定類型

    用ProcessOn作圖,C語言數據類型如下:

    

 

 

二、類型修飾符

 

    除void類型外,基本數據類型之前都可以加各種類型修飾符,類型修飾符有如下四種:

        1.signed----有符號,可修飾char、int。int是默認有符號的

        2.unsigned-----無符號,修飾int 、char

        3.long------長型,修飾int 、double

        4.short------短型,修飾int

 

 

三、各種數據類型介紹

 

    1.基本數據類型

        (以下各數據類型字長均指32位操作系統下,可用printf("%d",sizeof(數據類型名));進行測試。具體字長由具體編譯器決定,但確定的關系是:sizeof(short)≤sizeof(int)≤sizeof(long))

        整型:整形包括短整型、整形和長整形

            短整型:

                有符號短整型:short [int]    2byte -32768~32767

                無符號短整型:unsigned short [int]    2 byte 0~65535 

            整型:

                有符號整型:int /signed [int] 4 byte -2147483648~2147483647
                無符號整型:unsigned [int] 4 byte 0~4294967295

            長整形:

                有符號長整型:long [int]/signed long [int] 4 byte -2147483648~2147483647 

                無符號長整型:unsigned long [int] 4 byte 0~4294967295

            超長整型(C99 標准添加的類型):long long [int]  8 byte 0~18446744073709552000 

        P.S(C語言中整型和長整形都占4字節的原因):

            早期的C編譯平台下整形和長整型分別是2和4字節。隨着編譯平台版本的升級,現在二者都是4字節,short是2字節。另外整型數的字長與CPU的字長沒有密切關系:早期的int是2字節,但那時的CPU也已經是32位的了;再者你把現在4字節int編譯平台安裝在64位CPU機上去,同樣只能編譯4字節int的代碼,並不因為CPU成8字節了,你代碼中的int也成8字節了。(摘自百度知道

           long從字面上看,應該是64位才更合理,把long當成32位實在是一個歷史的包袱。像C#那樣新起爐灶的程序語言,由於沒有需要支持老代碼的問題,就把long當作64位來處理了。 

           在32位平台下,long是相對short而言,long(short)類型是long(short)int類型的簡稱,sizeof(long) = sizeof(int) = 4。int和long的范圍雖然一樣,但輸入輸出格式不同,printf int的格式為%d,而printf long的格式為%ld。

           考慮到程序的可移植性,還是要將他們區分開來。但當要求的數值范圍為4byte時,建議使用int類型,因為第一版的C語言只有一種類型,那就是int。(摘自百度文庫

        浮點型:

            單精度浮點型:float  4 byte -3.4E38~3.4E38 

            雙精度浮點型:double 8 byte 1.7E308~1.7E308 long double 8 byte

        字符型:

            有符號字符型:char/signed char 1 byte -128~127 
            無符號字符型:unsigned char 1 byte 0~255
            寬字符型:wchar_t (unsigned short) 2 byte 0~65535
        P.S:字符型賦值時可以是char c='a';也可以用字符對應的ASCII碼賦值:char c=97;
 

    2.指針類型:

        有關指針的數據類型

           int i ————定義整形變量i

           int *p———- p為指向整型變量的指針變量

           int a[n]——- 定義整型數組a,它有n個元素

           int *p[n]—– 定義指針數組p,它由n個指向整型數據的指針元素組成

           int (*p)[n] —p為指向含n個元素的一維數組的指針變量

           int f()——— f為返回整數型函數值的元素

           int *p()——- p為返回一個指針,該指針指向整型數據 或 整形數組

           int (*p)() —–p為指向函數的指針,該函數返回一個整數值

           int **p—- —-p是一個指針變量,它指向一個指向整數型數據的指針變量

         延伸可參考:基於指針的數據類型與指針運算小結 http://www.jb51.net/article/41051.htm

 

    3.構造類型:struct

        C語言構造類型分為:數組類型,結構類型和共用體類型

        數組類型:是由相同基本類型若干個元素組織在一起數據,它們有先后順序,也可以按這個順序對這些元素訪問
            如int a[10],共有10個元素,第個元素的類型都相同,都為整型
            這10 個元素,按順序分別是a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]

        結構體類型:在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變量、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問

            在C語言中,定義一個結構的一般形式為:

            struct結構名

            {

                //成員表列

            };

        延伸可參考:C語言結構體(struct)常見使用方法 http://blog.csdn.net/huqinwei987/article/details/23625823

        共用體類型:union

            幾個不同的變量共同占用一段內存的結構,在C語言中,被稱作“共用體”類型結構,簡稱共用體。注:在某些書籍中可能稱之為“聯合體”,但是“共用體”更能反映該類型在內存的特點

            在C語言中,定義一個結構的一般形式為:

            union 共用體名

             {
                成員表列
             }變量表列;
 

    4.空類型:void

        常用在程序編寫中對定義函數的參數類型、返回值、函數中指針類型進行聲明。

        具體參考void百科 http://baike.baidu.com/item/void/5126319?fr=aladdin

 

四、不同類型數據間的混合運算與類型轉換

 

    1.自動類型轉換

        在C語言中,自動類型轉換遵循以下規則:

       

        ①若參與運算量的類型不同,則先轉換成同一類型,然后進行運算

        ②轉換按數據長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型后再進行運算

            a、若兩種類型的字節數不同,轉換成字節數高的類型

            b、若兩種類型的字節數相同,且一種有符號,一種無符號,則轉換成無符號類型

        ③所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成double型,再作運算

        ④char型和short型參與運算時,必須先轉換成int型

        ⑤在賦值運算中,賦值號兩邊量的數據類型不同時,賦值號右邊量的類型將轉換為左邊量的類型。如果右邊量的數據類型長度左邊長時,將丟失一部分數據,這樣會降低精度,丟失的部分按四舍五入向前舍入

        

    2.強制類型轉換

        強制類型轉換一般格式如下:

            (類型名)(表達式)

        這種強制類型轉換操作並不改變操作數本身

 

 

五、練習題

 

    (練習題將逐步更新)

 

 

參考鏈接:

    C語言基本數據類型簡介:http://www.cnblogs.com/onedime/archive/2012/11/21/2780149.html

    深入解析unsigned int 和 int http://www.jb51.net/article/40518.htm

    強制類型轉換 http://baike.baidu.com/link?url=54pz-bWDJV2PiatUXXglxiY0pwuWVufjEyUuvl4N5k1Og7MnaohZ_lGEqboiaJVKw6l8Gy1UQOjT_DOO9R56xq

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM