C語(yǔ)言中計(jì)算機(jī)覺(jué)得-2大于1?不是算錯(cuò)而是你忽視了這些知識(shí)

前言
本文主要介紹的是C語(yǔ)言類(lèi)型轉(zhuǎn)換的一道題,這是筆試題中的一道比較簡(jiǎn)單的的題目,希望對(duì)于廣大讀者學(xué)習(xí)C語(yǔ)言有一些幫助。深入了解C語(yǔ)言小知識(shí),以下程序的打印結(jié)果是?

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

看到這里是不是有很多黑人問(wèn)題號(hào)呀?第一次接觸到這個(gè)問(wèn)題的時(shí)候是不是都懷疑人生了,這C也太坑了,一言不合就把你給弄得團(tuán)團(tuán)轉(zhuǎn)。
解析知識(shí):數(shù)據(jù)類(lèi)型一致性原則
C語(yǔ)言當(dāng)中,很多運(yùn)算,都需要保持?jǐn)?shù)據(jù)的類(lèi)型一致性,故我把這一行為稱(chēng)之為數(shù)據(jù)類(lèi)型一致性原則,例如:賦值運(yùn)算的時(shí)候 int a=1.11 ;根據(jù)結(jié)合性來(lái)講,從右往左,數(shù)據(jù)類(lèi)型一致性原則,1.11 會(huì)自動(dòng)轉(zhuǎn)換為int類(lèi)型 故 a最終的值是1。而對(duì)于數(shù)據(jù)類(lèi)型一致性原則中一般都遵循以下類(lèi)型轉(zhuǎn)換原則:數(shù)據(jù)都是優(yōu)先轉(zhuǎn)化為長(zhǎng)數(shù)據(jù)類(lèi)型,浮點(diǎn)與整形優(yōu)先轉(zhuǎn)化為浮點(diǎn)運(yùn)算,無(wú)符號(hào)與有符號(hào)優(yōu)先轉(zhuǎn)化為無(wú)符號(hào)。
解析知識(shí):數(shù)據(jù)溢出環(huán)形處理法
這里我以char和unsigned char類(lèi)型來(lái)進(jìn)行說(shuō)明,對(duì)于其他整形數(shù)據(jù)同樣分析即可,首先我們來(lái)看看使用補(bǔ)碼以后的數(shù)據(jù)表示范圍問(wèn)題,目前最經(jīng)典的圖形表示方法就是采用環(huán)形表示,如下圖:

這樣表示的好處是,一旦數(shù)據(jù)溢出,直接順著變化的方向即可找到對(duì)應(yīng)的值。這里也貼出實(shí)驗(yàn)的代碼如下:

最終輸出的結(jié)果與我們的環(huán)形結(jié)構(gòu)是相符合的,結(jié)果如下:

我們可以得出結(jié)論:相反數(shù)直接關(guān)于環(huán)形對(duì)稱(chēng)。同樣其他的數(shù)據(jù)類(lèi)型也是同樣的性質(zhì),僅僅只是數(shù)據(jù)范圍變大了。了解數(shù)據(jù)轉(zhuǎn)化概念以及數(shù)據(jù)溢出這兩點(diǎn)的小伙伴應(yīng)該都知道,該程序并不會(huì)輸出我們常規(guī)的-2 < 1,而是輸出-2 > 1這個(gè)結(jié)果。
尾言

文章都是手打原創(chuàng),每天最淺顯的介紹C語(yǔ)言、C++,windows知識(shí),喜歡我的文章就關(guān)注一波吧,每天帶你學(xué)習(xí)C/C++不同的知識(shí),也可以看到最新更新和之前發(fā)表的文章哦。如果足下基礎(chǔ)比較差,不妨關(guān)注下人人都可以學(xué)習(xí)的視頻教程
通俗易懂,深入淺出,一個(gè)視頻只講一個(gè)知識(shí)點(diǎn)。視頻不深?yuàn)W,不需要鉆研,在公交、在地鐵、在廁所都可以觀看,隨時(shí)隨地漲姿勢(shì)
如果今天學(xué)到知識(shí)的,可以在留言區(qū)留言學(xué)到了哦,如果喜歡的可以評(píng)論,轉(zhuǎn)發(fā),收藏哦,這真的對(duì)我很重要?。?/strong>