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

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

Integer Promotions in C 簡(jiǎn)介

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

這一規(guī)則是由C語言的發(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."

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

舉例子來了解一下整形提升

一些數(shù)據(jù)類型(比如char,short int)比int占用更少的字節(jié)數(shù),對(duì)它們執(zhí)行操作時(shí),這些數(shù)據(jù)類型會(huì)自動(dòng)提升為int或unsigned int,例如,在較小的類型(如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類型進(jìn)行算術(shù)運(yùn)算時(shí)發(fā)生的,我們得到了適當(dāng)?shù)慕Y(jié)果而沒有任何溢出。

整型提升的意義

雖然機(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類型的樹進(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語言標(biāo)準(zhǔn)中僅規(guī)定了:

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

這意味著short int與int的長(zhǎng)度相等的可能,這種情形下,unsigned short就無法提升為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語言標(biāo)準(zhǔn)沒有規(guī)定char類型是有符號(hào)還是無符號(hào),在這些環(huán)境下,編譯器把char定義為signed char。

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

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

表達(dá)式c == 0xb6000000沒有做整型提升,==運(yùn)算符的兩段都是int類型的負(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”是無符號(hào)字符,當(dāng)將其轉(zhuǎn)換為int時(shí),其值變?yōu)?51。

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

前綴+的情況

C語言的單操作數(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é)果中我們可以看到,前綴+把大小給提升了。

話說C語言的特點(diǎn)

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

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

   
    

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(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)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉