国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解

這篇具有很好參考價(jià)值的文章主要介紹了【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

追求本質(zhì),不斷進(jìn)步
本文由@睡覺待開機(jī)原創(chuàng),轉(zhuǎn)載請注明出處。
本內(nèi)容在csdn網(wǎng)站首發(fā)
歡迎各位點(diǎn)贊—評論—收藏
如果存在不足之處請?jiān)u論留言,共同進(jìn)步!

前言:
本節(jié)博客繼續(xù)前篇內(nèi)容進(jìn)行續(xù)寫,我們著重探求有符號與無符號數(shù)的問題,探求整形在內(nèi)存中的存儲這一課題

【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

一、空間的申請

1.變量定義

1.1變量定義的概念:

所謂變量定義,本質(zhì)上就是在內(nèi)存中開辟特定大小的空間(不做解釋,后文體會)。


概念區(qū)分:初始化與賦值
(1)概念:
初始化:指的是變量與生俱來的內(nèi)容屬性
賦值:值的是變量后來放到該變量空間的內(nèi)容屬性
(2)特點(diǎn):
初始化只能進(jìn)行一次,賦值可以進(jìn)行多次
初始化具有先天性的含義,賦值有著后天的含義。


1.2變量定義的原因:

定義變量的原因在于開辟空間,暫時(shí)存儲數(shù)據(jù)

首先,我們需要明確的是計(jì)算機(jī)是彌補(bǔ)人類計(jì)算能力低下問題誕生的(這里并沒有貶低人類的意思,就是說人類跟計(jì)算機(jī)相比計(jì)算能力確實(shí)相對來說比較差)
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

之后,我們需要明白,我們?nèi)祟愑?jì)算時(shí)候是需要一步一步計(jì)算的,計(jì)算機(jī)也是需要進(jìn)行先后計(jì)算了,并不是一下子就對所有數(shù)據(jù)進(jìn)行處理,計(jì)算機(jī)也是對一個(gè)一個(gè)數(shù)據(jù)進(jìn)行依次處理的,至于為什么算個(gè)數(shù)字那么快,因?yàn)橛?jì)算機(jī)算的快而已,這并不是說計(jì)算機(jī)對所有數(shù)據(jù)進(jìn)行同時(shí)處理。(注:當(dāng)然計(jì)算機(jī)也是可以同時(shí)對數(shù)據(jù)進(jìn)行處理的,不過同時(shí)處理數(shù)據(jù)的能力有限,了解即可)
然后,我們大概就明白了,為何需要變量?就是因?yàn)橛行?shù)據(jù)需要等待一些時(shí)間去讓計(jì)算機(jī)處理,在處理之前,需要先存儲起來防止數(shù)據(jù)丟失,這大概跟人類做運(yùn)算時(shí)候要寫在紙上差不多,省的忘了原來的數(shù)據(jù),如果忘了那就慘了。
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

那為啥需要把數(shù)據(jù)放在一個(gè)個(gè)變量里進(jìn)行處理???我數(shù)據(jù)直接放那一團(tuán)不就行了嘛,這有點(diǎn)類似于我們吃飯,我們一般都是用碗吃飯,而不是直接用鍋,原因在于效率高,計(jì)算機(jī)也是一樣,在處理數(shù)據(jù)的時(shí)候,先用變量把在“一鍋里的”數(shù)據(jù)分到一個(gè)個(gè)小碗里,然后就“吃”的快了。而且之前講過,我們做飯的地方跟我們吃飯的地方離得距離是比較遠(yuǎn)的,類似于硬盤中的程序跟cpu處理是比較遠(yuǎn)的,要想提高效率,就是借助變量變成“小碗”送到內(nèi)存當(dāng)中,這樣就跟cpu離得近了。其實(shí)我感覺變量就是起到了一個(gè)方便讀取數(shù)據(jù)的作用。

變量定義的本質(zhì)在于,開辟一塊內(nèi)存空間,暫時(shí)存儲數(shù)據(jù)

2.變量聲明

變量聲明的本質(zhì)就是:告知編譯器。**
兩者的區(qū)別在于,
聲明你可以聲明多次,定義只能定義一次哈。
本質(zhì)區(qū)別在于定義開辟內(nèi)存空間,變量聲明沒有開辟內(nèi)存空間。

這個(gè)區(qū)別有一個(gè)比較有意思的比喻,大概是這樣的,變量的定義類似于你跟你女朋友表白,只能表白一次吧?哈哈。然后變量的聲明的話就是你告訴你周圍的人,那個(gè)女孩是我女朋友哈,你們不要有非分之想了哈。這里想說聲明可以聲明無數(shù)次。(這里只是做一個(gè)比喻說明一下哈,無任何不良誘導(dǎo))

二、數(shù)據(jù)存入

首先同學(xué)們,我想問int a = -10;計(jì)算機(jī)會直接把-10存入內(nèi)存中嗎?答案是不是
原因在于計(jì)算機(jī)只認(rèn)識二進(jìn)制。
因而就需要進(jìn)制轉(zhuǎn)換,需要把-10這一個(gè)十進(jìn)制數(shù)字轉(zhuǎn)換成為二進(jìn)制的形式,這就牽扯到了原碼、反碼以及補(bǔ)碼的概念和轉(zhuǎn)換問題。

1.轉(zhuǎn)換補(bǔ)碼

【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

有符號數(shù):
首先,對于有符號數(shù),一定要能表示該數(shù)據(jù)是正數(shù)還是負(fù)數(shù),所以我們一般用最高比特位來充當(dāng)符號位。
原碼反碼補(bǔ)碼都有符號位和數(shù)值位。符號位0表示正數(shù),1表示負(fù)數(shù),而三種表示方法各不相同。
無符號數(shù):
不需要轉(zhuǎn)換,原碼反碼補(bǔ)碼相同不存在符號位。


如果一個(gè)數(shù)據(jù)是負(fù)整數(shù),那么要遵守下面的規(guī)則進(jìn)行轉(zhuǎn)換:
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言
原碼:直接將數(shù)字按照正負(fù)數(shù)的形式翻譯成二進(jìn)制即可
反碼:符號位不變,數(shù)值位按位取反
補(bǔ)碼:反碼+1
無符號數(shù):不需要轉(zhuǎn)換(原碼反碼補(bǔ)碼相同),沒有符號位的概念
整形:數(shù)據(jù)存放內(nèi)存中的其實(shí)是補(bǔ)碼


為啥需要補(bǔ)碼來存儲整形類型?
原因在于:
1.使用補(bǔ)碼,可以將符號位和數(shù)值位進(jìn)行統(tǒng)一處理,并且加法和減法也可以統(tǒng)一進(jìn)行處理
2.原碼與補(bǔ)碼的相互轉(zhuǎn)換,其運(yùn)算過程是相同的(都是取反+1),不需要格外的硬件電路

我需要強(qiáng)調(diào)一點(diǎn)的是,右邊數(shù)字的二進(jìn)制轉(zhuǎn)換與左邊的類型沒有半毛錢關(guān)系,編譯器判斷有無符號整形,只看你賦值的數(shù)字有沒有+號或者-號而已

那同學(xué)覺得計(jì)算機(jī)就這樣把補(bǔ)碼扔到內(nèi)存了嗎?
顯然不只如此!還需要考慮大小端存儲問題。

2.大小端存儲

大小端存儲取決于硬件單元,這個(gè)大小端存儲是啥意思呢?
大小端存儲的概念:
大端:低權(quán)值數(shù)字放到高地址處,高權(quán)重?cái)?shù)字放到低地址處。
小端:低權(quán)值數(shù)字放到低地址處,高權(quán)值數(shù)字放到高地址處。

【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

3.截?cái)?/h3>

考慮到怎么存儲之后,我們還得需要考慮一個(gè)問題,就是會不會發(fā)生截?cái)??比如你把一個(gè)數(shù)字放到一個(gè)char類型里面,char類型只有8個(gè)比特位,存不下一個(gè)數(shù)字的32個(gè)比特位,必然要發(fā)生截?cái)?/strong>。
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

當(dāng)然對于截?cái)鄦栴},只是順便一提,有興趣可以單獨(dú)去研究一下。

4.取值范圍的問題

一個(gè)類型有取值范圍,那你知道取值范圍是怎么進(jìn)行確定的嗎?
一個(gè)類型的取值范圍的大小取決于這個(gè)類型有多少個(gè)比特位

假如我只給你一個(gè)比特位,請問你可以表示幾個(gè)數(shù)字(不考慮符號位)?
就倆數(shù)字(2^1)嘛,一個(gè)0一個(gè)1嘛
我如果給你兩個(gè)比特位呢?
4(2^2)個(gè)數(shù)字,00,01,10,11
我如果給你三個(gè)比特位呢?
8(2^3)個(gè)數(shù)字,000,001,010,011,100,101,110,111
……
所以,,,一個(gè)8個(gè)比特位的char類型,可以表示幾個(gè)數(shù)字?2^8==256!
這也就解釋char(有符號)類型的取值范圍是-128—127了。
但是我有個(gè)小疑惑,-128靠8個(gè)比特位是怎么表示出來的?明明需要9個(gè)比特位啊。
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言
只是人為規(guī)定?。?!
之后呢,還要給大家看一個(gè)取值循環(huán)圖,大家就能明白類型的取值范圍是怎么回事了:
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

三、數(shù)據(jù)取出

1.大小端

還是要先看大小端問題,小端存儲就小端取出,大端存儲就大端取出即可。

2.自身類型

到了這個(gè)時(shí)候,說實(shí)在的左邊的類型才有作用,什么意思呢?左邊的類型決定了怎么看待這串二進(jìn)制數(shù)字。
比如說左邊如果是無符號整形類型,那么就不會把二進(jìn)制最高位看成符號位,同理,如果是有符號類型,就會把最高位的二進(jìn)制位看成符號位,這兩種情況是截然不同的數(shù)值!
【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解,C語言進(jìn)階學(xué)習(xí),c語言,性能優(yōu)化,開發(fā)語言

3.整型提升

如果我在內(nèi)存里面是一個(gè)8個(gè)比特位的字符呢?你放入的類型卻是一個(gè)int類型怎么辦?整型提升。有符號int補(bǔ)符號位,無符號int前面補(bǔ)0,給你補(bǔ)到32個(gè)比特位再說。當(dāng)然,這個(gè)地方也就不細(xì)說了,有興趣可以自行研究一下。

練習(xí)題

最后送大家一道練習(xí)題哈,如果看完本文章大體理解我說的啥的話,應(yīng)該可以做對,當(dāng)然不對的話也不要擔(dān)心哈,再弄懂就好啦,知識不是一下就會弄懂的。

int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d", strlen(a)); 
	return 0;
}

答案:255,請?jiān)嚪治霰绢}。
解析:略。文章來源地址http://www.zghlxwxcb.cn/news/detail-806966.html

到了這里,關(guān)于【C語言深度剖析——第四節(jié)(關(guān)鍵字4)】《C語言深度解剖》+蛋哥分析+個(gè)人理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言volatile關(guān)鍵字

    在C語言中, volatile 是一個(gè)類型修飾符,用于告訴編譯器對象的值可能會在編譯器無法檢測到的情況下被改變。這通常發(fā)生在以下兩種情況: 硬件的輸入/輸出操作,例如一個(gè)設(shè)備寄存器的讀取或?qū)懭搿?共享內(nèi)存的并行程序,其中一個(gè)線程修改了一個(gè)內(nèi)存位置,而另一個(gè)線程

    2024年02月07日
    瀏覽(29)
  • C語言-外部關(guān)鍵字extern

    C語言-外部關(guān)鍵字extern

    extern ?extern 用在全局變量或函數(shù)的聲明前,用來說明“此變量/函數(shù)是在別處定義的,要在此處引用。 ?什么是定義,什么是聲明? ? ? ? 什么是定義:所謂的定義就是為這個(gè)變量分配一塊內(nèi)存并給它取上一個(gè)名字,這個(gè)名字就是我們經(jīng)常所說的變量名。但注意,這個(gè)名

    2024年02月07日
    瀏覽(22)
  • 【C語言】static關(guān)鍵字詳解

    【C語言】static關(guān)鍵字詳解

    目錄 1.static是什么? 2.static修飾的對象是? 3.static修飾后改變了什么? 4.static修飾操作演示 (1) 局部變量 如果加了static修飾局部變量i會怎么樣? 全局區(qū)(靜態(tài)區(qū)) (2)?全局變量 如果給全局變量加上了static修飾呢? 二者區(qū)別?? 這樣用有什么用? (3)?函數(shù) 5.總結(jié)

    2024年02月10日
    瀏覽(18)
  • 深度解析Python關(guān)鍵字:掌握核心語法的基石(新版本35+4)

    深度解析Python關(guān)鍵字:掌握核心語法的基石(新版本35+4)

    目錄 keyword 列表 kwlist softkwlist? 分類? 數(shù)據(jù)類型 True、False None 運(yùn)算類型 and、or、not in is 模塊導(dǎo)入 import 輔助 from、as 上下文管理 with 占位語句 pass 流程控制 if、elif、else for while break、continue 類和函數(shù) class def lambda return yeild 變量相關(guān) global nonlocal de

    2024年01月22日
    瀏覽(24)
  • 前端學(xué)習(xí)C語言 - 函數(shù)和關(guān)鍵字

    本篇主要介紹: 自定義函數(shù) 、 宏函數(shù) 、 字符串處理函數(shù) 和 。 基本用法 實(shí)現(xiàn)一個(gè) add() 函數(shù)。請看示例: 其中a, b 叫 形參 ,num1, num2 叫 實(shí)參 。 Tip :形參和實(shí)參的個(gè)數(shù)不同,筆者編譯器報(bào)錯(cuò)如下(一個(gè)說給函數(shù)的參數(shù)少,一個(gè)說給函數(shù)的參數(shù)多了): 函數(shù)調(diào)用過

    2024年02月09日
    瀏覽(25)
  • C語言操作符和關(guān)鍵字

    C語言操作符和關(guān)鍵字

    C語言中,0表示假,非0表示真 sizeof ++ (類型)強(qiáng)制類型轉(zhuǎn)換 d的結(jié)果就是: static修飾局部變量 static修飾全局變量 static修飾函數(shù)

    2024年04月28日
    瀏覽(27)
  • C語言之static關(guān)鍵字詳解

    C語言之static關(guān)鍵字詳解

    ?前言: 一、幾個(gè)概念 1.變量 2.局部變量和全局變量 3.變量的作用域 4.變量的生命周期 二、static的作用 三、static修飾局部變量 四、static修飾全局變量 ?五、static修飾函數(shù) ?寫在最后: ? ? ? ? ? ?static,英文意思靜態(tài)的,作為C語言常用中一

    2024年02月03日
    瀏覽(26)
  • C語言標(biāo)準(zhǔn)定義的32個(gè)關(guān)鍵字

    C語言標(biāo)準(zhǔn)定義的32個(gè)關(guān)鍵字

    歡迎關(guān)注博主 Mindtechnist 或加入【智能科技社區(qū)】一起學(xué)習(xí)和分享Linux、C、C++、Python、Matlab,機(jī)器人運(yùn)動控制、多機(jī)器人協(xié)作,智能優(yōu)化算法,濾波估計(jì)、多傳感器信息融合,機(jī)器學(xué)習(xí),人工智能等相關(guān)領(lǐng)域的知識和技術(shù)。 專欄:《精通C語言》 C語言中的數(shù)據(jù)類型主要有下面

    2024年02月13日
    瀏覽(26)
  • [開發(fā)語言][c++]:Static關(guān)鍵字和全局變量

    [開發(fā)語言][c++]:Static關(guān)鍵字和全局變量

    寫在前面: 如果您只是想回顧或了解一下static和全局變量的異同點(diǎn),那么下面的總結(jié)將滿足您的需求。 如果您是一位初學(xué)者或?qū)Χ叩氖褂媚@鈨煽桑ㄗh您讀完該篇文章,相信這一篇將解答完您對于static以及全局變量的所有疑惑。 如有問題或建議歡迎評論 or 私信

    2024年01月20日
    瀏覽(46)
  • 【C語言】靜態(tài)關(guān)鍵字static的用法(詳解)

    【C語言】靜態(tài)關(guān)鍵字static的用法(詳解)

    ???個(gè)人主頁:庫庫的里昂 ???CSDN新晉作者 ???歡迎 ??點(diǎn)贊?評論?收藏 ??收錄專欄:C語言初階 ??其他專欄:代碼小游戲 ???希望作者的文章能對你有所幫助,有不足的地方請?jiān)谠u論區(qū)留言指正,大家一起學(xué)習(xí)交流!?? 【前言】 不同于其他,他們都有多種用

    2024年02月14日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包