計算機編程入門基礎知識「零基礎學c語言pdf教程」

這是一個C語言系列文章,如果是初學者的話,建議先行閱讀之前的文章。筆者也會按照章節順序發佈。

零基礎學C語言——變量、常量與數據類型

變量

對於初學編程語言的人來說,變量這個概念第一反應或許是數學中的自變量x。在編程中,與之相似,即變量中存放的數據可以更改。但是與數學不同的是,變量在計算機中還有額外的屬性。

一個變量包含的屬性:

  1. 變量的值
  2. 變量所處的位置

對於第一點,大家很好理解,x=1,那麼變量x的值為1,x = x + 1之後,x的值為2。

對於第二點,我們不得不提及兩個事物——內存寄存器

這裡我們暫時先不介紹寄存器,留待後續章節討論,這並不會妨礙你學習和使用C語言。

在一般情況下,C語言中定義的變量都存儲在內存中(請暫時忽略,函數的部分參數是存在寄存器中的事實)。內存是一塊連續的區域,如果類比的話我們可以參考路邊劃線的停車位。

零基礎學C語言——變量、常量與數據類型

一組停車位相當於一段內存空間,而每一個停車位就相當於這段內存空間中的一部分片段。我們的變量就好比是一個停車位區域。

額外補充一下,內存的最小存儲單位是比特(bit),也叫位,即只能存儲一個值,這個值要麼是0,要麼是1。8個bit稱作一位元組(byte)。

為了能更好的管理停車位,我們都要對停車位進行命名編號,便於我們快速定位某一個車位,內存亦然。因此,也就出現了一個概念叫做地址

假設,圖片中離鏡頭最近的車位為1號車位,編號逐個向遠處遞增。同時,我給1號車位區域起了個名字叫x。這時,有一輛奔馳停入了1號車位,那麼我也可以說,x中的車是奔馳車。

等價到內存這個概念上就是,我有一個變量叫x,它在內存中的地址是1,它的值是奔馳。

隨後,奔馳開走了,又來了輛路虎。那麼這時,我可以說變量x的值是路虎,它的內存地址是1。

常量

前面介紹了變量,表示一段內存中的數據是可以變化的。與之相對的,就是常量,即一段內存中存放的數據是不可改變的。這就好比一張光盤(暫時不考慮可擦寫的…),一旦寫入內容,就不可再更改了。

常量在C語言中的關鍵字為const,初學者先不必糾結,且繼續閱讀。

數據類型

本小節討論的是基礎數據類型,因此不會討論數組這樣的結構。

在編程語言中,人為的給定了存放在內存中數據的類型,在C語言中,這些類型有:

  • 整型,即整數
  • 浮點型,即實數
  • 字符型,即單個的可打印字符(什麼叫可打印的我們後面會說到)
  • 空類型,即無類型
  • 指針類型

下面我們將逐個類型說明,初學者暫時不需要死記硬背每一個類型的數值範圍,在有需求時查閱範圍即可。

整型分為:

  • 有符號短整型,對應關鍵字為short,佔用2位元組內存,即該類型的數據值範圍為-32,768 到 32,767
  • 無符號短整型,對應關鍵字為unsigned short,佔用2位元組內存,數據值範圍0 到 65,535
  • 有符號整型,關鍵字int,佔用4位元組(注意,在windows上這個類型佔2位元組),數據值範圍-2,147,483,648 到 2,147,483,647
  • 無符號整型,關鍵字unsigned int,佔用4位元組,數據值範圍0 到 4,294,967,295
  • 有符號長整型,關鍵字long32位系統上佔4位元組,數據值範圍-2,147,483,648 到 2,147,483,647,64位系統上佔8位元組,數據值範圍-9223372036854775808到9223372036854775807
  • 無符號長整型,關鍵字unsigned long32位系統上佔4位元組,數據值範圍0 到 4,294,967,295,64位系統上佔8位元組,數據值範圍0到18446744073709551615
  • 還有long longunsigned long long,占8位元組內存,數據值範圍分別為-9223372036854775808到9223372036854775807和0到18446744073709551615

浮點型分為:

  • 單精度浮點型,關鍵字為float,占4位元組,數值範圍1.2E-38 到 3.4E+38,精度是精確到6位小數
  • 雙精度浮點型,關鍵詞為double,占8位元組,數值範圍2.3E-308 到 1.7E+308,精度是精確到15位小數
  • 還有一種,碼哥我詞窮了,不知道中文該怎麼叫了,關鍵詞為long double,占16位元組,數值範圍3.4E-4932 到 1.1E+4932,精度是精確到19位小數

可以看到,實數都是有一個精度範圍的,如果超出這個精度範圍就會造成精度損失,因此在運行一些除法運算後再執行乘法力圖恢復初始值時有時是不可能的。

字符型分為:

  • 有符號字符,關鍵詞char,占1位元組,數值範圍-128 到 127
  • 無符號字符,關鍵詞unsigned char,占1位元組,數值範圍0 到 255

其中char型字符為可輸出字符,參考ASCII碼錶來找到其對應的輸出到終端上的字符:零基礎學C語言——變量、常量與數據類型

ASCII碼錶

其中,值為0~31和127的字符是控制類字符,剩餘為可顯示字符

空類型:又稱為void型,關鍵字為void,表示無類型或者不知其類型。

指針類型:本節暫時不討論,留待後續專門討論指針的文章中詳述。

看一些例子

到此,我們來看一下各種類型的例子,鞏固一下前面的內容。

整型示例:

short var_1 = -1; //有符號短整型

unsigned short var_2 = 65535; //無符號短整型

int var_3 = 1000000; //有符號整型

unsigned int var_4 = 999999999; //無符號整型

long var_5 = 9876278913; //有符號長整型

unsigned long var_6 = 12871236897; //無符號長整型

long long var_7 = -1238123871; //碼哥詞窮,這類型你就當是長長整型吧...

unsigned long long var_8 = 1987623453;

const int a = 10; //整型常量a的值為10

const short b = 127; //短整型常量b的值為127

浮點型示例:

float var_1 = 3.141592; //單精度浮點數

double var_2 = 1.124987651; //雙精度浮點數

long double var_3 = 3231.3123817682;

const float pi = 3.141592; //單精度浮點型常量pi的值為3.141592

字符型示例:

char var_1 = 70; //有符號字符型

char var_2 = 'F'; //有符號字符型,var_2和var_1其實是相等的,在ASCII碼錶中,F的十進制值即為70
//如果要給char型變量賦值ASCII碼錶中可顯示字符,需要用單引號擴住,且單引號內只能有一個字符
//但有一種特例,叫做轉譯字符例如下面:
char var_3 = 'n'; //這裡的  就是轉義字符,當編譯器遇到轉自字符時會吞掉轉義字符,
//並查看其後字符是什麼字符,然後轉成相應特定字符,本例中n為換行符,即ASCII中值為10的換行符。

unsigned char var_4 = 255; //無符號字符型

const char enter = 'n'; //字符型常量enter的值為 n

變量以及常量的命名要求

上面的示例中碼哥對變量和常量的名字命名都是形如:

var_xxx

其實在C語言中,變量與常量的名字命名是有規範的,要求如下:

名字必須以字母或者下劃線開頭,後面的字符既可以是字母也可以是下劃線也可以是數字。

所以,形如如下名字是不合法的:

123_abc
-a
+a
123bcd

類型轉換

先來看一個例子體會一下:

int a = 5.0 / 2;

/表示➗,即除法。這時a的值是多少呢?

答案是2,而不是2.5。這裡就是類型轉換起了作用。5.0是浮點數,浮點數除整數,得到的結果還是浮點數,但是這個值賦給了整型變量a,因此除法的結果需要滿足a的類型約束,只保留整數部分,因此就是2。這裡也不存在四捨五入一說,即便是2.99999也會是2,而不是3。

上面的這種轉換叫做自動類型轉換,與之相對的轉換模式叫強制類型轉換

我們先看下強制類型轉換的例子,也就能理解上面這個例子叫自動類型轉換了。

int b = (int)2.5;

在這個例子中,如果不在2.5前加(int),那麼編譯器會給出警告,說你這麼寫等於是「偷摸地」將雙精度浮點數轉換為整型了。為了避免這個警告(當然,取整數也是符合這個例子中我的預期的,即我要的也是整數),在2.5前加入:

(基礎數據類型) //本例為(int)

將2.5先轉成整型2,然後賦給變量b。

下面看一些其他類型轉換的例子:

unsigned char var_1 = (unsigned char)'F'; //因為'F'默認為char型

short var_2 = (short)999999; //999999為int型,直接賦值會爆出警告,強制類型轉換後不會有警告,但是var_2的值為16959

這裡var_2的值為16959的原因是:

整型999999佔4位元組,其十六進制為0x000F423F。short類型佔2位元組,因此會將int型的低16位(即後兩位元組)內容賦給變量var_2,也就是0x423F,這個十六進制數轉換為十進制後的值就是16959。

對於十六進制不了解的讀者,可以去網上先充一下電,因為十六進制在編程中用到的頻度不比整數低。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/273677.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:07
下一篇 2024-12-17 14:07

相關推薦

發表回復

登錄後才能評論