www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > > 小麥大叔
[導(dǎo)讀]整型提升是C程序設(shè)計(jì)語(yǔ)言中的一項(xiàng)規(guī)定:在表達(dá)式計(jì)算時(shí),各種整形首先要提升為int類(lèi)型,如果int類(lèi)型不足以表示的話,就需要提升為unsigned int類(lèi)型,然后再執(zhí)行表達(dá)式的運(yùn)算。

Integer Promotions in C 簡(jiǎn)介

整型提升是C程序設(shè)計(jì)語(yǔ)言中的一項(xiàng)規(guī)定:在表達(dá)式計(jì)算時(shí),各種整形首先要提升為int類(lèi)型,如果int類(lèi)型不足以表示的話,就需要提升為unsigned int類(lèi)型,然后再執(zhí)行表達(dá)式的運(yùn)算。

這一規(guī)則是由C語(yǔ)言的發(fā)明人丹尼斯·里奇與肯·湯普遜創(chuàng)設(shè)的:

"A character, a short integer, or an integer bit-field, all either signed or not, or an object of enumeration type, may be used in an expression wherever an integer maybe used. If an int can represent all the values of the original type, then the value is converted to int; otherwise the value is converted to unsigned int. This process is called integral promotion."

這段話的大意是:無(wú)論使用什么整數(shù),都可以在表達(dá)式中使用char,short int或 int字段(全部帶符號(hào)或沒(méi)有符號(hào))或枚舉類(lèi)型的對(duì)象。如果一個(gè)int可以代表原始類(lèi)型的所有值,則該值將轉(zhuǎn)換為int;否則,該值將轉(zhuǎn)換為unsigned int,這個(gè)過(guò)程稱為整體提升。

舉例子來(lái)了解一下整形提升

一些數(shù)據(jù)類(lèi)型(比如char,short int)比int占用更少的字節(jié)數(shù),對(duì)它們執(zhí)行操作時(shí),這些數(shù)據(jù)類(lèi)型會(huì)自動(dòng)提升為int或unsigned int,例如,在較小的類(lèi)型(如char,short和enum)上不會(huì)進(jìn)行算術(shù)計(jì)算,代碼如下:

 1//在win10_64位+vs2017  2#include    3int main()  4{  5 char a = 30, b = 40, c = 10;  6 char d = (a * b) / c;  7 printf ("%d ", d);  8 system("pause");  9 return 0; 10}

輸出結(jié)果:120

直接看代碼,表達(dá)式(a * b)/ c似乎引起算術(shù)溢出,因?yàn)閹Х?hào)的字符只能具有-128至127的值(在大多數(shù)C編譯器中),而子表達(dá)式的值(a * b)=1200,大于128。

但是整數(shù)提升是在char類(lèi)型進(jìn)行算術(shù)運(yùn)算時(shí)發(fā)生的,我們得到了適當(dāng)?shù)慕Y(jié)果而沒(méi)有任何溢出。

整型提升的意義

雖然機(jī)器指令中可能有現(xiàn)兩個(gè)8比特字節(jié)這種字節(jié)相加指令,但是一般用途的CPU是難以直接實(shí)現(xiàn)這樣的字節(jié)相加運(yùn)算的。

所以,表達(dá)式中各種長(zhǎng)度可能小于int長(zhǎng)度的整型值,都必須先轉(zhuǎn)換為int或unsigned int,然后才能送入CPU去執(zhí)行運(yùn)算。

CPU內(nèi)整型運(yùn)算器(ALU)的操作數(shù)的字節(jié)長(zhǎng)度一般就是int的字節(jié)長(zhǎng)度,同時(shí)也是CPU的通用寄存器的長(zhǎng)度。而表達(dá)式的整型運(yùn)算要在CPU的相應(yīng)運(yùn)算器件內(nèi)執(zhí)行。

因此,兩個(gè)char類(lèi)型的樹(shù)進(jìn)行相加運(yùn)算時(shí),是在CPU中執(zhí)行,自然而然的需要先轉(zhuǎn)換為CPU內(nèi)整型操作數(shù)的標(biāo)準(zhǔn)長(zhǎng)度。

應(yīng)用舉例

short int的長(zhǎng)度 = int的長(zhǎng)度的情況

C語(yǔ)言標(biāo)準(zhǔn)中僅規(guī)定了:

char的長(zhǎng)度 ≤ short int的長(zhǎng)度 ≤ int的長(zhǎng)度

這意味著short int與int的長(zhǎng)度相等的可能,這種情形下,unsigned short就無(wú)法提升為int表示,只能提升為unsigned int,代碼如下:

 1//在win10_64位+vs2017  2#include   3int main(){  4 char a = 0xb6;  5 short b = 0xb600;  6 int c = 0xb6000000;  7 if ( a == 0xb6) printf("a");  8 if ( b == 0xb600) printf("b");  9 if ( c == 0xb6000000) printf("c"); 10 system("pause"); 11}

輸出結(jié)果:c

C語(yǔ)言標(biāo)準(zhǔn)沒(méi)有規(guī)定char類(lèi)型是有符號(hào)還是無(wú)符號(hào),在這些環(huán)境下,編譯器把char定義為signed char。

表達(dá)式a==0xb6被整型提升,其中char類(lèi)型的a提升為int類(lèi)型并表示為一個(gè)負(fù)值,因此這個(gè)表達(dá)式的結(jié)果為false;

表達(dá)式b==0xb600被整型提升,其中short類(lèi)型的b提升為int類(lèi)型并為一個(gè)負(fù)值,因此這個(gè)表達(dá)式的結(jié)果為false;

表達(dá)式c == 0xb6000000沒(méi)有做整型提升,==運(yùn)算符的兩段都是int類(lèi)型的負(fù)值,其結(jié)果為true。

我們?cè)倏紤]以下程序作為另一個(gè)示例。

 1//在win10_64位+vs2017  2#include    3  4int main()  5{  6 char a = 0xfb;  7 unsigned char b = 0xfb;  8  9 printf("a = %c", a); 10 printf("\nb = %c", b); 11 12 if (a == b) 13 printf("\nSame"); 14 else 15 printf("\nNot Same"); 16 17 system("pause"); 18 return 0; 19}

輸出結(jié)果:

a=

b=

Not Same

當(dāng)我們打印“a”和“b”時(shí),將打印相同的字符,但是當(dāng)我們比較它們時(shí),輸出的結(jié)果卻不相同。

“a”和“b”與char具有相同的二進(jìn)制表示形式,但是,當(dāng)對(duì)“a”和 ”b”執(zhí)行比較操作時(shí),它們首先會(huì)轉(zhuǎn)換為int。

“a”是一個(gè)有符號(hào)的字符,當(dāng)轉(zhuǎn)換為int時(shí),其值變?yōu)?5(有符號(hào)的值0xfb)。

“b”是無(wú)符號(hào)字符,當(dāng)將其轉(zhuǎn)換為int時(shí),其值變?yōu)?51。

值-5和251具有不同的int表示形式,因此我們得到的輸出為“Not Same”。

前綴+的情況

C語(yǔ)言的單操作數(shù)的+運(yùn)算符(即“前綴+”),一個(gè)主要作用就是實(shí)現(xiàn)對(duì)操作數(shù)的整型提升。例如:

 1//在win10_64位+vs2017  2#include   3int main()  4{  5 char a = 1;  6 printf("%u", sizeof(a) );  7 printf("\n");  8 printf("%u", sizeof( +a ) );  9 system("pause"); 10 return 0; 11}

輸出結(jié)果:

1

4

從結(jié)果中我們可以看到,前綴+把大小給提升了。

話說(shuō)C語(yǔ)言的特點(diǎn)

這里不得不提一下C語(yǔ)言的特點(diǎn),C語(yǔ)言高效、靈活、功能豐富、表達(dá)力強(qiáng),在誕生起初,為了避免各開(kāi)發(fā)廠商用的C語(yǔ)言語(yǔ)法產(chǎn)生差異,C語(yǔ)言訂定了一套語(yǔ)法ANSI C,作為C語(yǔ)言的標(biāo)準(zhǔn)。

以上所有的程序以及結(jié)論都是在win10_64位+vs2017完成的,不同平臺(tái)和不同編譯器之間可能的實(shí)驗(yàn)結(jié)果都不一樣,但這并不影響我們深入理解C語(yǔ)言的特性,講原理,摳細(xì)節(jié),究根源,樂(lè)趣在此。

   
    

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉