《C語言學習筆記》變量和數據類型

今天剛剛翻看了本身當初學習C語言時候的筆記,發現感觸挺深的,正好這個時候正是本身的複習階段,就拿過來複習一下吧

第一個C語言程序

程序:爲解決特定的問題而用計算機語言編寫的有序指令序列的集合html

#include<stdio.h>

int main(void){
    printf("Hello World");
    return 0;
}

這個程序須要回答如下幾個問題:html5

程序是如何執行的 ?程序員

  • 編輯:經過程序員的編寫,造成源代碼文件,源代碼文件包括兩個部分:源文件(.c)(>=1個)頭文件(.h)(>=0個)。源文件和頭文件在實際目錄中是在同一層目錄之下的,而咱們在編譯器中看到的則是一個虛擬目錄,自動分紅的目錄。
  • 編譯:經過編譯將源文件翻譯成二進制文件目標文件(.obj),進行語法錯誤的檢查。編譯過程當中,是以源文件爲基本單位的。
  • 連接:將編譯的到的全部的目標文件經過連接造成惟一的一個可執行性的文件(.exe)
  • 執行:獲得程序運行的結果
  • 調試(debug)也是一個環節,但對於個別小程序來說,調試不是必須的過程。

對上面程序是如何理解的 ?算法

  • 上面程序中用到了頭文件,頭文件也叫預處理文件,由標識符#、預處理指令include和頭文件組成。#include是預處理指令,它的做用是將指定的頭文件內容放到預處理指令的所在位置。
  • 頭文件是一個標準的函數庫,頭文件名用來指名你使用的庫函數所在的文件名,程序中使用printf庫函數包含在stdio.h(stdio表示standard input/output)
  • 頭文件的執行是經過源文件來執行的,頭文件不參與編譯過程,頭文件有兩種形式
    <>表示系統文件,即表示預處理的文件從系統規定的位置尋找頭文件
    ""表示當前目錄下的頭文件,即表示預處理的文件先從當前目錄下進行尋找,若經過,繼續進行下面的編譯,若沒有再從系統中尋找頭文件。
  • main函數是可執行程序的入口函數。一個C程序有且只有一個main函數

變量

問題的求解須要用到算法,算法主要有如下幾個特徵:編程

  • 有窮性
  • 確切性
  • 可行性
  • 一個算法有零個或多個輸入
  • 一個算法有一個或多個輸出

變量的定義:小程序

  • 程序中經過數據類型定義變量來表示本身須要的數據,能夠給內存中一塊連續的空間起一個名字,經過這個名字來操做它,這個名字就是變量名,也叫作標識符
  • 變量定義必須放在變量使用以前。通常放在函數體的開頭部分。

變量聲明的基本語法:函數

/*數據類型  變量名1, 變量名2 …, 變量名n;*/

int a;// 定義了一個變量a,a的數據類型是int型

變量命名的規範:學習

  1. 變量名由數字,字母和下劃線_組成
  2. 數字不能打頭
  3. 不能使用C語言中的關鍵字
  4. C語言的變量名中的字母區分大小寫
  5. 變量名應該儘可能有意義,參考編程規範

變量的賦值:spa

變量能夠先定義再賦值,也能夠在定義的同時進行賦值;在定義變量的同時賦初值稱爲初始化
注意,在定義中不容許連續賦值,如a=b=c=5是不合法的翻譯

常考試題:
D )是合法的用戶自定義標識符。
A.case(關鍵字) B.123f(數字) C. #html5(符號) D. _int

數據類型

整型數據

整型數據的分類和範圍

  • short 2個字節
  • int 2/4個字節(8位和16位系統是2字節,32位系統是4字節,64位系統仍是4字節)
  • long 4/8個字節(除了64位系統是8字節,其餘都是4字節)
  • long long intlong long 8個字節 (VC6.0不支持,是在C99中添加的)

整型數據能夠分爲符號型和無符號型 ,前綴帶有unsigned的都是無符號型。在同一個編譯器和系統下,有符號無符號表示的字節都是相同的

不一樣的系統必須知足sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)

各種型長度:

// short int
short int(2字節佔16位) :-(2^15-1)~(2^15-1),即-32767~32767
unsigned short int(2字節佔16位):0~(2^16-1),即0~65535

// int
int(32/64位系統,4字節佔32位):-(2^31-1)~(2^31-1),即-2147483647 ~2147483647
unsigned int(32/64位系統,4字節佔32位):0~(2^32-1),即0 ~ 4294967295

// long int
long int(非64位系統,4字節佔32位):-(2^31-1)~(2^31-1),即-2147483647 ~2147483647
unsigned long int(非64位系統,4字節佔32位):0~(2^32-1),即0 ~ 4294967295
long int(64位系統,8字節佔64位):-(2^63-1)~(2^63-1),即 -9223372036854775807~9223372036854775807
unsigned long int(64位系統,8字節佔64位):0~(2^64-1),即 0~18446744073709551615

// long long int
long long int(8字節佔64位):-(2^63-1)~(2^63-1),即 -9223372036854775807~9223372036854775807
unsigned long long int(8字節佔64位):0~(2^64-1),即 0~18446744073709551615

無符號類型長度總比有符號類型長度多一位,好比16位int是±2^15-1,16位unsigned int倒是2^16-1,是由於有符號整型須要一個位去做爲符號位,用於表示正負,因此少一位;而無符號整型不須要符號位,全部位所有用於表示整數。

整型數據在內存中存放的方式

  • 在內存中數值是以補碼的形式存儲的
  • 有符號整數在內存中的存儲
    正數:原碼、補碼、反碼相同
    負數: 原碼:數值的二進制表示 反碼:符號位不變,數值的二進制按位取反 補碼:數值的反碼加1

整型數據的表示方法

  • 十進制數:十進制數沒有前綴。其數碼爲0~9。
    如下是合法的十進制數:23七、-56八、6553五、1627
    如下是不合法的十進制數:023 (不能有前導0)、23D (非十進制數碼)。
  • 八進制數:八進制數必須以0開頭,即以0做爲八進制數的前綴。數碼取值爲0~7。八進制數一般是無符號數
    如下是合法的八進制數:015(十進制爲13)、0101(十進制爲65)、0177777(十進制爲65535);
    如下是不合法的八進制數:256(無前綴0)、03A2(包含了非八進制數碼)、-0127(出現了負號)。
  • 十六進制數:十六進制數的前綴爲0X或0x。其數碼取值爲0~9,A~F或a~f
    如下是合法的十六進制數:0X2A(十進制爲42)、0XA0 (十進制爲160)、0XFFFF (十進制爲65535);
    如下是不合法的十六進制數:5A (無前綴0X)、0X3H (含有非十六進制數碼)。

字符型數據

字符型數據是用單引號括起來的一個字符。例如:'a'、'b'、'='、'+'、'?'都是合法字符型數據。

  • 字符型數據只能用單引號括起來,不能用雙引號或其它括號。
  • 字符型數據只能是單個字符,不能是字符串。
  • 字符能夠是字符集中任意字符。但數字被定義爲字符型以後就不能參與數值運算。如'5'5是不一樣的。'5'是字符型數據,不能參與運算。

轉義字符
轉義字符是一種特殊的字符。轉義字符以反斜線"\"開頭,後跟一個或幾個字符。轉義字符具備特定的含義,不一樣於字符原有的意義,故稱 「轉義」 字符。
轉義字符主要用來表示那些用通常字符不便於表示的控制代碼:

轉義字符 轉義字符的意義 ASCII代碼
\n 回車換行 10
\t 橫向跳到下一製表位置 9
\b 退格 8
\r 回車 13
\f 走紙換頁 12
\\ 反斜線符"" 92
\' 單引號符 39
\" 雙引號符 34
\a 鳴鈴 7
\ddd 1~3位八進制數所表明的字符
\xhh 1~2位十六進制數所表明的字符

字符類型說明符

字符變量的類型說明符是char。字符變量類型定義的格式和書寫規則都與整型變量相同。例如:char a,b;
每一個字符變量被分配一個字節的內存空間,所以只能存放一個字符。字符值是以ASCII碼的形式存放在變量的內存單元之中的。

由ASCII碼能夠看出:

  • 小寫的ASCII碼比大寫的ASCII碼大32,經常使用的a爲97 A爲65
  • 後面的ASCII碼比前面的ASCII碼大
  • '3'要變化成3須要'3'-'0'=3

字符串

字符串是由一對雙引號括起的字符序列。例如: "CHINA" ,"C program" , "$12.5" 等都是合法的字符串。

字符串和字符不一樣,它們之間主要有如下區別:

  • 字符由單引號括起來,字符串由雙引號括起來。
  • 字符只能是單個字符,字符串則能夠含一個或多個字符。
  • 能夠把一個字符型數據賦予一個字符變量,但不能把一個字符串賦予一個字符變量。
  • 字符佔一個字節的內存空間。字符串佔的內存字節數等於字符串中字節數加1。增長的一個字節中存放字符"\0" (ASCII碼爲0)。這是字符串結束的標誌。

實型數據

實型數據類型指的就是浮點數或實數

實型數據類型的分類

類型說明符 比特數(字節數) 有效數字 數的範圍
float 32(4) 6~7 -10^38~10^38
double 64(8) 15~16 -10^308~10^308

由以上內容能夠看出:

  • 實型數據沒有辦法精確的表示全部數字,所以表示的範圍大
  • 相鄰兩個數據的距離是不等距的
  • 每一種實型數據都有本身的有效位數和精度

實型數據的表示

  1. 十進制數形式:由數碼0~9小數點組成。 例如:0.0、25.0、5.78九、0.1三、5.0、300.、-267.8230 等均爲合法的實數。注意,必須有小數點。
  2. 指數形式:由十進制數,加階碼標誌"e""E"以及階碼(只能爲整數,能夠帶符號)組成。其通常形式爲:a E n(a爲十進制數,n爲十進制整數) 其值爲 a*10^n。如:2.1E5 (等於2.1*10^5) 3.7E-2 (等於3.7*10^-2)

實型數據在內存中的表示

前面的符號位很容易判斷爲0或者是1,指數部分稱之爲階碼,這個階碼部分是由偏置值(127或1111111)和階碼真值相加獲得的,階碼真值符合IEEE-754標準,這個標準規定了是這個數必定能寫成1.--*2的多少次方的形式,尾數部分的存儲是原碼的存儲

常量和字面值

常量

常量 說明
直接常量(字面量) 能夠當即拿來用,無需任何說明的量。
符號常量 用標識符表明一個常量。#define 標識符 常量
const常量 const int x=3.14;

字面值

  • 整型常量的類型:通常默認整型常量爲int型。也能夠根據其值所在範圍或後綴肯定其數據類型
長整型字面值         123L    23l

無符號整型字面值     123U    123u

無符號長整型字面值   123UL   123ul

long long型字面值   123ll    123LL
  • 浮點型字面值:默認爲double型,也可使用後綴f,F,l,L肯定類型。

求字符串的長度

字符串字面值是由一對雙引號括起來的字符序列(以'\0'結束)。

  1. 字符串字面值會自動在字符串最後加上'\0',佔據一個字節的內存。
  2. 求字符串長度的時候注意轉義字符佔據一個字節,例如:'\xdd'等。
相關文章
相關標籤/搜索