「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
轉載于:https://www.cnblogs.com/corvoh/p/5141746.html
總結
以上是生活随笔為你收集整理的「C语言」数据类型及混合运算与类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10款微信公众平台相关的开源软件(转)
- 下一篇: C# 窗口最大化但不占用任务栏位置