午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

C語言核心技術(shù)-變量和數(shù)據(jù)類型

 昵稱67168469 2019-11-12

計(jì)算機(jī)的計(jì)算單位

容量單位

在購買電腦時(shí),通常會(huì)選擇高配置的內(nèi)存、硬盤。例如2019款15寸的MacBookPro已經(jīng)可以選配32G內(nèi)存和4T的固態(tài)硬盤,而這里的32G和4T就是計(jì)算機(jī)常用的容量單位。

在物理層面,我們使用高低電平來記錄信息,通常使用高電平表示1,低電平表示0,因此在計(jì)算機(jī)底層只能認(rèn)識0,1兩種狀態(tài)。而0,1能夠表示的內(nèi)容太少,迫切需要更大的容量表示方法,因此誕生了字節(jié)(Byte),千字節(jié)(KB),兆字節(jié)(MB),吉字節(jié)(GB),太字節(jié)(TB),拍字節(jié)(PB),艾字節(jié)(EB),除了bit和Byte之外,從Byte到KB,MB,GB,TB,PB,EB,它們的換算都是以2的10次方即1024換算的。

  • 位(bit)是最小的計(jì)算機(jī)容量單位,通常用于門電路,只能存儲0或者1

  • 字節(jié)(Byte)、千字節(jié)(KB)、兆字節(jié)(MB)表示網(wǎng)絡(luò)傳輸,文件大小。字節(jié)是最基本的容量計(jì)量單位。

  • 吉字節(jié)(GB)通常用于表示計(jì)算機(jī)內(nèi)存、磁盤的容量單位

  • 太字節(jié)(TB),拍字節(jié)(PB)通常是用于表示云盤、移動(dòng)硬盤的容量單位

  • 艾字節(jié)(EB)通常是用于表示數(shù)據(jù)中心的容量單位

現(xiàn)在通常筆記本的內(nèi)存通常是8G,16G,32G,64G等等,而運(yùn)行在筆記本之上的操作系統(tǒng)普遍都是64位的,因?yàn)?2位系統(tǒng)只能使用4G內(nèi)存,下面是4G的內(nèi)存換算

在購買內(nèi)存或者買移動(dòng)硬盤時(shí),通常使用的存儲單位就是GB或者是TB,但是在買4T的移動(dòng)硬盤時(shí),實(shí)際的可用容量卻只有3T多,因?yàn)橛?jì)算機(jī)的存儲單位是以2的10次方(即1024)換算,而硬盤廠商們是以1000為換算單位。

4T的硬盤換算成位如下所示

而硬盤廠商的實(shí)際容量

因此實(shí)際的可用容量是

而在一些互聯(lián)網(wǎng)巨頭(例如國內(nèi)的BAT,國外的亞馬遜、蘋果、微軟、谷歌,臉書)公司中,可能使用到比TB更大的海量數(shù)據(jù),也就是PB或者EB,它們的換算單位如下所示。

速度單位

  • 網(wǎng)絡(luò)速度網(wǎng)絡(luò)常用的單位是Mbps而網(wǎng)絡(luò)帶寬提供商(例如長城寬帶)聲稱的百兆帶寬實(shí)際上是100Mbit/s,但是100M光纖測試的峰值速度只會(huì)有12.5MB/s,它們之間的換算是100Mbit/s=(100/8)MB/s=12.5MB/s。

  • CPU速度CPU的速度一般是由CPU的時(shí)鐘頻率所體現(xiàn)的,而時(shí)鐘頻率的單位是赫茲(Hz),目前主流的CPU時(shí)鐘頻率一般都在2GHz以上,而赫茲(Hz)其實(shí)就是秒分之一,也就是每秒鐘的周期性變動(dòng)重復(fù)次數(shù)的計(jì)量。GHz即十億赫茲(10^9Hz),2GHz就是二十億赫茲,也就是說2GHz的CPU每秒可以變化20億次。

數(shù)據(jù)類型

數(shù)據(jù)為什么要分類

數(shù)據(jù)類型就是給數(shù)據(jù)分類,其目的就是合理的利用計(jì)算機(jī)的內(nèi)存空間,提高存儲效率。類型是抽象的概念,類型有大小,但是沒有空間,系統(tǒng)不會(huì)給類型分配空間,但是會(huì)給類型定義的變量分配空間,例如定義變量 int age =28;時(shí)系統(tǒng)會(huì)給age變量分配四個(gè)字節(jié)的空間。不同的數(shù)據(jù)類型占據(jù)不同的內(nèi)存大小,其存儲數(shù)據(jù)的極限也不一樣、能夠執(zhí)行的運(yùn)算也是不相同的。

C語言常用基本數(shù)據(jù)類型

C語言中基本數(shù)據(jù)類型有整型、浮點(diǎn)型、字符型,布爾型。其他的類型都是由基本數(shù)據(jù)類型封裝而來的。

其中整數(shù)按照不同的字節(jié)大小有short,int,long,long long,其中l(wèi)ong long 是C99標(biāo)準(zhǔn)支持。浮點(diǎn)數(shù)按照精度不同有float,double,其中float表示單精度浮點(diǎn)型,double表示雙精度浮點(diǎn)型。字符只有char表示,用于存儲單個(gè)字符。布爾使用bool表示,C語言中的0表示false,1表示true。

sizof關(guān)鍵字查看數(shù)據(jù)類型占據(jù)的內(nèi)存容量

C語言提供了提供了sizeof()關(guān)鍵字來獲取數(shù)據(jù)類型占據(jù)的內(nèi)存空間。sizeof()中可以傳數(shù)據(jù)類型名或者變量名,當(dāng)傳遞變量名實(shí)際上是求變量類型的大小。

需要注意的是C語言相同的數(shù)據(jù)類型在不同的操作系統(tǒng)環(huán)境下占據(jù)的空間是不一樣的。在Visual Studio 2019中集成了32位編譯器和64位編譯器,C程序默認(rèn)是以32位運(yùn)行( https://link.zhihu.com/?target=https%3A//jq.qq.com/%3F_wv%3D1027%26k%3D5n2xgg8 )的。

C語言核心技術(shù)-變量和數(shù)據(jù)類型

32位:sizeof()關(guān)鍵字的運(yùn)行結(jié)果

C語言核心技術(shù)-變量和數(shù)據(jù)類型

如果想要切換到64位下運(yùn)行,只需要將X86換成x64即可

C語言核心技術(shù)-變量和數(shù)據(jù)類型

64位:sizeof()關(guān)鍵字的運(yùn)行結(jié)果

C語言核心技術(shù)-變量和數(shù)據(jù)類型

在Windows平臺下long類型無論是在32位還是64位都是占據(jù)四個(gè)字節(jié),而Linux(Ubuntu18.04)則是占據(jù)8個(gè)字節(jié)。

Ubuntu18.04下sizeof()關(guān)鍵字測試

程序運(yùn)行結(jié)果

C語言核心技術(shù)-變量和數(shù)據(jù)類型

數(shù)據(jù)的有符號和無符號

有符號表示數(shù)據(jù)有正負(fù)之分,數(shù)值二進(jìn)制的最高位(左邊第一位)為符號位,0表示整數(shù),1表示負(fù)數(shù),其他位為負(fù)數(shù)。以兩個(gè)字節(jié)的數(shù)據(jù)1為例子,其二進(jìn)制表示為0000 0000 0000 0001,因?yàn)槭钦龜?shù),因此最高位是0,-1的二進(jìn)制表示為1000 0000 0000 0001( https://link.zhihu.com/?target=https%3A//jq.qq.com/%3F_wv%3D1027%26k%3D5n2xgg8 ),因?yàn)槭秦?fù)數(shù),因此最高位是1。無符號數(shù)表示數(shù)據(jù)沒有正負(fù)之分,全是正數(shù)(即大于等于0的數(shù)),無符號數(shù)沒有符號位,全是數(shù)據(jù)位。以兩個(gè)字節(jié)的數(shù)據(jù)1為例子,其二進(jìn)制表示為0000 0000 0000 0001。

C語言中的整數(shù)常量默認(rèn)都是有符號的,如果要使用無符號的常量,需要在常量值后面添加U后綴。C語言中的整數(shù)變量默認(rèn)都是有符號的,如果要使用無符號的變量,需要在變量類型前面加上unsigned關(guān)鍵字。

有符號整數(shù)常量和無符號整數(shù)常量

有符號和無符號變量

數(shù)據(jù)類型的極限

數(shù)據(jù)類型都有其存儲范圍(即存儲的最大值和最小值),C語言中的limits.h和float.h頭文件中分別定義了整數(shù)和浮點(diǎn)數(shù)的極限。在使用數(shù)據(jù)類型時(shí),切勿超過其極限,否則會(huì)造成程序異常。

常量

任何基本類型都有變量和常量兩種類型。常量是 其值在程序運(yùn)行期間不能修改 ,例如小數(shù)3.14,字符'a'都是常量,常量之所以不能被修改,是因?yàn)槌A渴窃谖淖殖A繀^(qū)。內(nèi)存在存儲數(shù)據(jù)時(shí),考慮到數(shù)據(jù)不同的用途和特點(diǎn),把內(nèi)存存儲區(qū)域分為各種區(qū)域:棧區(qū)、堆區(qū)、代碼區(qū)、文字常量區(qū)、全局區(qū)。每個(gè)區(qū)域的數(shù)據(jù)類型都有各自的特點(diǎn)。

在日常開發(fā)中常用的常量有字符常量、短整型常量、整型常量、長整型常量、單精度浮點(diǎn)型常量以及雙精度浮點(diǎn)型常量。

結(jié)合C語言提供的printf函數(shù)以及格式符實(shí)現(xiàn)格式化輸出常用基本數(shù)據(jù)類型的常量值

變量

變量的本質(zhì)

生活中隨處可見變量,例如股市的漲跌,游戲人物的武力值都是不斷變化的。變量就是程序運(yùn)行時(shí)其值可以被修改,而且在定義變量時(shí)系統(tǒng)會(huì)根據(jù)變量類型開辟內(nèi)存空間,變量可以進(jìn)行讀寫操作,在同一時(shí)刻,內(nèi)存中的變量只能存儲一份值。如果對變量進(jìn)行修改,新值會(huì)覆蓋舊值。

這里可以通過一段程序結(jié)合Visual Studio 2019的調(diào)試功能查看內(nèi)存中值的變化理解變量及其讀寫數(shù)據(jù)本質(zhì)。

運(yùn)行程序前,首先設(shè)置斷點(diǎn)。

C語言核心技術(shù)-變量和數(shù)據(jù)類型

然后啟動(dòng)程序,查看控制臺輸出num的變量地址然后通過Visual Studio 2019的調(diào)試->窗口->內(nèi)存菜單查看內(nèi)存,并在地址欄中輸入整數(shù)變量num的地址,查看變量值。Visual Studio 2019中查看內(nèi)存的值默認(rèn)是一字節(jié),不帶符號,十六進(jìn)制顯示。

C語言核心技術(shù)-變量和數(shù)據(jù)類型

可以通過鼠標(biāo)右鍵設(shè)置成四字節(jié)、帶符號顯示。

C語言核心技術(shù)-變量和數(shù)據(jù)類型

當(dāng)程序執(zhí)行num=30時(shí),內(nèi)存中的值被修改了

C語言核心技術(shù)-變量和數(shù)據(jù)類型

程序運(yùn)行結(jié)果

C語言核心技術(shù)-變量和數(shù)據(jù)類型

變量的定義

變量在使用前必須要先定義 即聲明并賦初始值 ,否則會(huì)出現(xiàn)編譯錯(cuò)誤。定義變量時(shí)系統(tǒng)會(huì)針對變量的類型開辟指定的內(nèi)存空間。

變量定義的目的是讓變量在系統(tǒng)中存在,變量定義后系統(tǒng)給變量開辟內(nèi)存空間,變量定義的格式是 類型名+類型名,例如 int number,number就是變量名,類型為int,意味著編譯器會(huì)針對number變量開辟4個(gè)字節(jié)的內(nèi)存空間。變量名的本質(zhì)就是空間內(nèi)容的別名,操作變量就是操作變量代表的那塊內(nèi)存空間。

在定義變量時(shí),變量名還要遵守以下的命名規(guī)則。

  • 變量名由字母、數(shù)字、下劃線組成。

  • 變量名不能以數(shù)字開頭。

  • 變量名不能是關(guān)鍵字,關(guān)鍵字是被C語言賦予了特殊的含義,但是可以包含關(guān)鍵字,Visual Studio 2019中藍(lán)色的都是關(guān)鍵字。

變量的初始化

變量使用前必須賦值完成初始化,即變量定義時(shí)就給變量賦值,例如int age=0;,否則會(huì)發(fā)生編譯錯(cuò)誤:error C4700: 使用了未初始化的局部變量。定義變量時(shí)賦值叫變量的初始化,而定義完成以后再賦值不叫初始化,只是單純的賦值。

在定義變量時(shí)可以針對變量的類型賦對應(yīng)的初始值,例如整數(shù)賦值為0,浮點(diǎn)數(shù)賦值為0.0,字符類型可以初始化為'\\u00'。

日常開發(fā)中通常都是先定義再使用變量,而且通常都需要在定義時(shí)初始化即賦值,如果使用了一個(gè)沒有賦值的變量,程序會(huì)發(fā)生編譯錯(cuò)誤。

變量的聲明

變量的聲明表示告訴編譯器該變量已經(jīng)存在,此處通過編譯,但是不會(huì)再開辟內(nèi)存空間。變量的聲明分為自動(dòng)識別和顯示聲明兩種,日常開發(fā)中通常使用自動(dòng)識別聲明變量。如果變量定義在使用前面,編譯器可以自動(dòng)識別變量聲明,因?yàn)榫幾g器在編譯時(shí)是從上到下逐語句編譯。

如果變量的定義不再使用的前面,可以使用extern關(guān)鍵字顯示聲明變量,在聲明時(shí)不用賦值,否則會(huì)引發(fā)變量“重定義,多次初始化的編譯錯(cuò)誤”。

但是如果最終變量沒有定義在使用之后,程序運(yùn)行時(shí)還是會(huì)出現(xiàn)異常,例如這里如果注釋int age = 26;就會(huì)出現(xiàn) 無法解析的外部符號 age。

變量的使用

變量的使用表示對變量的讀寫操作,所謂讀就是獲取變量的值,例如使用printf()輸出變量的值,寫就是賦值以及各種變量的運(yùn)算,C語言中使用"="表示賦值,賦值是將右邊的值賦值給左邊的變量,也就是操作內(nèi)存空間。

除此以外后續(xù)還會(huì)學(xué)習(xí)各種運(yùn)算符,例如算術(shù)運(yùn)算符、自增運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、三元運(yùn)算符、位運(yùn)算符等等。

變量的算術(shù)運(yùn)算操作

讀取鍵盤的輸入

之前在定義整數(shù)變量并初始化值時(shí)只能寫死一個(gè)值,整數(shù)變量建議初始化時(shí)為0,這樣可以避免許多不必要的錯(cuò)誤出現(xiàn)。為了讓程序變得更加靈活,這里引入C語言標(biāo)準(zhǔn)庫函數(shù)scanf()函數(shù)實(shí)現(xiàn)基于終端字符界面的人機(jī)交互。當(dāng)然日常應(yīng)用(例如淘寶、京東)都是基于UI界面實(shí)現(xiàn)人機(jī)交互,但是底層處理的邏輯是一樣的。

scanf()函數(shù)可以從鍵盤中讀取用戶輸入的整數(shù)、小數(shù)、字符等等,該函數(shù)的參數(shù)需要傳遞 提取數(shù)據(jù)格式和變量地址 兩個(gè)參數(shù),提取數(shù)據(jù)格式指的就是用戶輸入的數(shù)據(jù)類型,例如整數(shù)、小數(shù)等等,變量地址就是&變量名,&表示地址符號,變量名只能代表空間的內(nèi)容,通過&變量名獲取變量對應(yīng)存儲空間存儲的值。scanf()函數(shù)是阻塞式的,當(dāng)用戶輸入數(shù)據(jù)之后,數(shù)據(jù)會(huì)存儲到標(biāo)準(zhǔn)輸入緩存區(qū)中,然后scanf()函數(shù)負(fù)責(zé)從標(biāo)準(zhǔn)緩沖區(qū)中拿指定格式的數(shù)據(jù),如果用戶不輸入數(shù)據(jù),那么程序會(huì)一直處于阻塞狀態(tài),直到用戶輸入數(shù)據(jù)后程序繼續(xù)往下執(zhí)行。

程序運(yùn)行結(jié)果

C語言核心技術(shù)-變量和數(shù)據(jù)類型

計(jì)算機(jī)常用進(jìn)制及其轉(zhuǎn)換

計(jì)算機(jī)底層為什么只能識別二進(jìn)制

我們目前主要使用的計(jì)算機(jī)都是大規(guī)模集成電路,是采用大規(guī)模和超大規(guī)模的集成電路作為邏輯元件的。集成電路按其功能、結(jié)構(gòu)的不同,可以分為模擬集成電路、數(shù)字集成電路和數(shù)/?;旌霞呻娐啡箢?。而我們的計(jì)算機(jī)主要是采用數(shù)字集成電路搭建的。邏輯門是數(shù)字邏輯電路的基本單元。常見的邏輯門包括“與”門,“或”門,“非”門,“異或”等等。通過邏輯門可以組合使用實(shí)現(xiàn)更為復(fù)雜的邏輯運(yùn)算和數(shù)值運(yùn)算。邏輯門可以通過控制高、低電平,從而實(shí)現(xiàn)邏輯運(yùn)算。電源電壓大小的波動(dòng)對其沒有影響,溫度和工藝偏差對其工作的可靠性影響也比模擬電路小得多,所以相對穩(wěn)定。因?yàn)閿?shù)字計(jì)算機(jī)是由邏輯門組成,而邏輯電路最基礎(chǔ)的狀態(tài)就是兩個(gè)——開和關(guān)。所以,數(shù)字電路是以二進(jìn)制邏輯代數(shù)為數(shù)學(xué)基礎(chǔ)。二進(jìn)制的基本運(yùn)算規(guī)則簡單,運(yùn)算操作方便,這樣一來有利于簡化計(jì)算機(jī)內(nèi)部結(jié)構(gòu),提高運(yùn)算速度。但是在日常開發(fā)中,通常都會(huì)使用八進(jìn)制和十六進(jìn)制,因?yàn)榘诉M(jìn)制和十六進(jìn)制相對于二進(jìn)制表示數(shù)據(jù)更加簡潔,而且一個(gè)八進(jìn)制表示三個(gè)二進(jìn)制,一個(gè)十六進(jìn)制表示四個(gè)二進(jìn)制。例如1024使用二進(jìn)制表示為0b100 0000 0000,使用八進(jìn)制表示為02000,使用十六進(jìn)制表示為0x400。

進(jìn)制概述

進(jìn)制的定義:進(jìn)制是一種計(jì)數(shù)方式,也稱為進(jìn)位計(jì)數(shù)法或者位值計(jì)數(shù)法,使用有限數(shù)字符號表示無限的數(shù)值,使用的數(shù)字符號的數(shù)目稱為這種進(jìn)位制的基數(shù)或者底數(shù),例如十進(jìn)制就是由0-9十個(gè)數(shù)字組成。在計(jì)算機(jī)內(nèi)存中,都是以二進(jìn)制的補(bǔ)碼形式來存儲數(shù)據(jù)的,生活中以十進(jìn)制方式計(jì)算的數(shù)據(jù)居多,例如賬戶余額,開發(fā)人員的薪水等等。計(jì)算的內(nèi)存地址、MAC地址等等通常都是使用十六進(jìn)制表示的,Linux系統(tǒng)的權(quán)限系統(tǒng)采用八進(jìn)制的數(shù)據(jù)表示的。相同進(jìn)制類型數(shù)據(jù)進(jìn)行運(yùn)算時(shí)會(huì)遵守加法:逢R進(jìn)1;減法:借1當(dāng)R,其中R就表示進(jìn)制。

計(jì)算機(jī)常用進(jìn)制的組成、示例和使用場景

十進(jìn)制轉(zhuǎn)換二進(jìn)制、八進(jìn)制、十六進(jìn)制

十進(jìn)制轉(zhuǎn)換二進(jìn)制、八進(jìn)制、十六進(jìn)制可以采用短除法,即待轉(zhuǎn)換的十進(jìn)制數(shù)除以指定的進(jìn)制(例如2,8,16),直到商數(shù)為0,求余數(shù)。

十進(jìn)制101轉(zhuǎn)換為二進(jìn)制的計(jì)算過程

然后將余數(shù)的結(jié)果從下到上串聯(lián)起來的結(jié)果:1100101,即十進(jìn)制的101轉(zhuǎn)換為二進(jìn)制的結(jié)果為1100101

十進(jìn)制的237轉(zhuǎn)換為二進(jìn)制

然后將余數(shù)的結(jié)果從下到上串聯(lián)起來的結(jié)果:11101101,即十進(jìn)制的237轉(zhuǎn)換為二進(jìn)制的結(jié)果為11101101。

二進(jìn)制轉(zhuǎn)八進(jìn)制、十六進(jìn)制

二進(jìn)制轉(zhuǎn)八進(jìn)制是按照從右往左,每3位二進(jìn)制對應(yīng)1位八進(jìn)制,因?yàn)?的3次方等于8

二進(jìn)制整數(shù)11001100轉(zhuǎn)八進(jìn)制計(jì)算過程

二進(jìn)制轉(zhuǎn)十六進(jìn)制是按照從右往左,每4位二進(jìn)制對應(yīng)1位十六進(jìn)制,因?yàn)?的4次方等于16。

二進(jìn)制整數(shù)1100 1110轉(zhuǎn)十六進(jìn)制計(jì)算過程

八進(jìn)制、十六進(jìn)制轉(zhuǎn)二進(jìn)制

八進(jìn)制轉(zhuǎn)二進(jìn)制是按照從右往左,每1位八進(jìn)制對應(yīng)3位二進(jìn)制。

八進(jìn)制整數(shù)0127轉(zhuǎn)二進(jìn)制整數(shù)計(jì)算過程

十六進(jìn)制轉(zhuǎn)二進(jìn)制是按照從右往左,每1位十六進(jìn)制對應(yīng)4位二進(jìn)制。

十六進(jìn)制整數(shù)0x12f轉(zhuǎn)換為二進(jìn)制整數(shù)計(jì)算過程

二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)十進(jìn)制

首先明確不同進(jìn)制的值是如何計(jì)算的,這里以十進(jìn)制和二進(jìn)制為例子,闡述它們的計(jì)算過程。

十進(jìn)制整數(shù)1024

二進(jìn)制整數(shù) 10000000000

二進(jìn)制、八進(jìn)制、十六進(jìn)制整數(shù)轉(zhuǎn)十進(jìn)制整數(shù)是使用按權(quán)展開法計(jì)算的,這里以二進(jìn)制數(shù)據(jù)01100101為例子。從右往左開始數(shù),如果二進(jìn)制位為1,則依次用1*2^n,n從0開始。

二進(jìn)制整數(shù)01100101 轉(zhuǎn)換為十進(jìn)制整數(shù)的計(jì)算過程

八進(jìn)制整數(shù)0127轉(zhuǎn)換為十進(jìn)制整數(shù)的計(jì)算過程

十六進(jìn)制整數(shù)0x12f轉(zhuǎn)換為十進(jìn)制整數(shù)的計(jì)算過程 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多