- 相關推薦
C語言基本類型
程序中不可能離開數據,平時我們將各種數據錄入計算機時,就是為了讓計算機來處理這些數據。
計算機在處理這些數據首先要對這些數據進行存放再進行處理。計算機內存的最小單位為字節(byte) 還有KB MB….
C語言基本類型
他們之間的關系是1024b=1kb 1024kb=1mb
由于我們存入的數據可能類型不同 計算機存放數據 可以用一個字節來存放。
也可能臨時把幾個相鄰的字節合并來記錄一個數字,在內存中用來記錄一個數字的區域叫一個存儲區(一個或多個字節)內存中每個字節都有在內存中獨立的編號。
變量
這個編號叫做這個叫做字節的地址(一般以十六進制表示)
我們可以通過這個字節的地址找到對應的字節,C語言足可以便用變量代表一個存儲區,這樣可以簡化對存儲區的使用
變量:是可變的 具有存儲空間的。
常量:不可變的 具有存儲空間的。
計算機可以根據變量找到變量對應的地址,變量在使用之前需要讓計算機為它分配一段內存(存儲區)。可以用變量的聲明讓計算機為它分配存儲區,變量的聲明方法。
標識符命名規則
在聲明變量時我們自定義一個變量名在編程時使用變量名函數名等的叫做標識符。
1 第一個字母只能是英文或者下劃線
2 后面的字母可以是英文字母,下劃線或者阿拉伯數字字符
3 標識符中大小寫不同的字符被看作是不同的字符(大小寫敏感)
4 關鍵字不可以當作標識符使用
5 標識符長度沒有限制,但是計算機只會截取一段使用(c89規范中截取前31個字符,c99截取前63個字符)
類型名 變量名;Int num;
變量的使用方法:
存儲數據一個數據 從變量中獲得數據并進行計算。
如果在聲明之前未指定變量的值 那么系統會為變量提供一個默認值,變量的賦值語句可以向變量中存放一個數據賦值語句一般由賦值操作符(=)來進行賦值操作,(=)前的數據必須能代表一個存儲區(左值)。
1=2; a=b;(=)后的數據必須是能代表一個數字的內容Int num =1;或者 int num;Num=1;
Printf()函數
變量名在程序中可以代表存儲區也可以代表存儲區的數字(由前后語境決定),變量在使用之前都應該初始化 Printf 是一個標準庫函數 。
功能:
把程序中的數據打印在終端窗口里,在使用之前我們需要包含stdio.h頭文件。
Printf函數調用語句中使用占位符可以把雙引號進而的%X的位置保留下來,輸出的內容由后面對應的變量的值決定。不同的占位符需要對應變量相應的數據類型,一個打印語句中可以有多個占位符配合多個不同的類型數據進行使用。
數據類型
在printf函數的“ ”內: 是一個轉義符號 (在注釋里代表續行符)
‘ ’ 換行
‘ ’ 回車
‘ ’ 制表符(換列)
‘a’ 警報
‘’ 退格
‘’ 反斜杠
C語言的數據類型
C為程序員提供了針對不同用途的多種選擇 各種類型的區別在于他們的提供的數值范圍以及是否可以取負值四種基本類型:int char float double
有符號: signed unsigned int num 。
無符號: unsigned 。
C 99中新增 long long int unsigned long long int 。
64位系統
這個位數指的是CPU 里面的通用寄存器的數據寬度為64位,也就是說一個地址占二進制位數是64 32位同理 。
ASCII
數據在存儲與運算時使用的是二進制表示 當在表示a b *%$這些字母字符時為了統一通信時不出現混亂,美國有關的標準化組織出臺了ASCII編碼‘0’ 48 ‘A’ 65 ‘a’ 97。
Sizeof關鍵字
Sizeof 關鍵字可以用來計算一個變量或數據類型的存儲區所占的字節個數
注意
1 小括號里若修改了任何存儲區的內容 這種修改不會生效。
2 sizeof 是一個運算符而非函數。
C語言進制知識總結
1.什么是進制
進制是一種計數的方式,常用的有二進制、八進制、十進制、十六進制。任何數據在計算機內存中都是以二進制的形式存放的。
我對進制的個人理解,二進制數是以2為計算單元,滿2進1位的數;八進制數是以8為計算單元,滿8進1位的數。
對于任何一個數字,我們都可以用不同的進制來表示,比如,十進制數12,用二進制表示為1100,用八進制表示為14,用十六進制表示為0xC。
2.進制的轉換規則
遵循滿進制值進1位,個位數變為0的原理,下面我們以十進制數18為例,對1-18中每一個數值轉換各種進制做一個詳細說明
轉二進制:
①小于2,無需進1位,1的二進制值是1
②為二進制值1后面一個數,由于1+1滿2,需要進1位,個位數變為0,所以2的二進制值是10
③為二進制值10后面一個數,由于11的個位數1小于2,無需進1位,所以3的二進制值是11
④為二進制值11后面一個數,由于11的個位數1+1滿2,需要進1位,而二進制值11的位數1+1又滿2,所以位數加1,最終轉換結果為100
轉換思路:
二進制值11+1 ->10+(1+1)(個位等于2,進1位,個位數變為0) ->(1+1)+0(位數滿2,進1位) -> 100
以此類推,最終十進制數18的二進制轉換結果是10010
轉八進制:
1-7小于8,無需進1位,1-7的八進制由1-7表示
8為八進制值7后面一個數,由于7+1滿8,需要進1位,個位數變為0,所以8的八進制值是10
以此類推,最終十進制數18的八進制轉換結果是22
轉十六進制:
十六進制中,個位數1-15分別為1 2 3 4 5 6 7 8 9 a b c d e f (a=10....f=15)
16為十六進制值c后面1個數,由于c+1滿16,需要進1位,個位數變為0,所以16的十六進制是10。
最終十進制數18的十六進制轉換結果是12
詳細結果如下圖所示(C語言把數字前面加0x的數認為是十六進制數)
3.C語言中int類型進制的聲明以及占位符
雖然以下3個變量的賦值方式不同,但實際賦值結果都是18
//二進制類型數字加0b
int number1 = 0b10010;
//八進制類型數字加0
int number2 = 022;
//十六進制類型數字加0x
int number3 = 0x12;
八進制占位符:%o
十六進制占位符:%x
4.內存存儲數據細節
我們知道,int類型數據占據4個字節,1個字節是8bit。并且任何數據在計算機內存中都是以二進制的形式存放的,所以內存需要用32個0或1來描述1個int類型數據。
由于18的二進制數是10010,我們將一個int類型變量賦值18,本質上是將這個變量的內存地址對應的32個bit位修改為:
0000 0000 0000 0000 0000 0000 0001 0010(未滿31位,后面的數字用0填充:為什么是31而不是32呢,后面會介紹)
假設我們定義兩個變量
int number1 = 12; int number2 = 13;
計算機會根據內存地址以由大到小的順序進行分配內存空間,具體如下圖所示:
5.進制的轉換公式
二進制轉十進制
0b1100 ->0*2的0次方 + 0*2的1次方 + 1*2的2次方 + 1*2的3次方 = 12
十進制轉二進制
67 ->64+2+1 ->2的6次方+ 2的1次方 + 2的0次方 = 0b1000011
6.進制的其他知識
①.n位二進制能保存的整數范圍公式:2的n次方-1
例如,3位的二進制數最大值為111,對應的十進制數字為7;5位的二進制數最大值為11111,對應的十進制數字為(2*2*2*2*2)-1 = 31。
②.負數的二進制保存規則是最左邊的數字是1。例如,0000 0000 0000 0000 0000 0000 0001 0010 表示正整數,1111 1111 1111 1111 1111 1111 1110 1101表示負數
由此,我們就能推測出,int類型能保存的最大整數是2的(32-1)次方-1 = 2147483647。為什么要用32-1,很簡單,32個bit中,必須抽1個bit位用來描述這個數字是正數還是負數。
【C語言基本類型】相關文章:
C語言常量的類型10-31
C語言變量的類型10-30
c語言引用類型和值類型09-07
C語言的指針類型解析09-14
C語言指針變量的類型07-31
C語言的指針類型詳解05-21
C語言的指針類型講解11-02
C語言類型轉換的方法08-05
C語言的枚舉類型知識07-22