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

『C語言初階』第八章 -隱式類型轉(zhuǎn)換規(guī)則

這篇具有很好參考價值的文章主要介紹了『C語言初階』第八章 -隱式類型轉(zhuǎn)換規(guī)則。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

『C語言初階』第八章 -隱式類型轉(zhuǎn)換規(guī)則,C語言初階知識,c語言,c++
??博客主頁 小羊失眠啦.
??系列專欄 C語言
???每日語錄但行前路,不負韶華!
??感謝大家點贊??收藏?評論??


『C語言初階』第八章 -隱式類型轉(zhuǎn)換規(guī)則,C語言初階知識,c語言,c++

前言

今天小羊又來給鐵汁們分享關(guān)于C語言的隱式類型轉(zhuǎn)換規(guī)則,在C語言中類型轉(zhuǎn)換方式可分為隱式類型轉(zhuǎn)換顯式類型轉(zhuǎn)換(強制類型轉(zhuǎn)換),其中隱式類型轉(zhuǎn)換是由編譯器自動進行,無需程序員干預(yù),今天小羊課堂說的就是關(guān)于隱式類型轉(zhuǎn)換,隱式類型轉(zhuǎn)換分為兩種情況:整型提升和算術(shù)轉(zhuǎn)換。


一、隱式類型轉(zhuǎn)換的規(guī)則

在c語言中,自動類型轉(zhuǎn)換遵循以下規(guī)則:

  1. 若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進行運算。
  2. 轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉(zhuǎn)成long型后再進行運算。
    a、若兩種類型的字節(jié)數(shù)不同,轉(zhuǎn)換成字節(jié)數(shù)高的類型
    b、若兩種類型的字節(jié)數(shù)相同,且一種有符號,一種無符號,則轉(zhuǎn)換成無符號類型
  3. 所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉(zhuǎn)換成double型,再作運算。
  4. char型和short型參與運算時,必須先轉(zhuǎn)換成int型。
  5. 在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時,將丟失一部分數(shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入。

二、整型提升

C的整型算術(shù)運算總是至少以缺省整型類型的精度來進行的,為了獲得這個精度,表達式中的字符和短整型操作數(shù)在使用之前被轉(zhuǎn)換為普通整型,這種轉(zhuǎn)換稱為整型提升。

原理

有符號補符號位,無符號位無腦補0

1.負數(shù)的整型提升

高位補充符號位,即補1

char a=-1;
變量a的二進制位(補碼)中只有8個比特位:
11111111
因為char是有符號的char
所以整型提升的時候,補符號位,即補1
提升結(jié)果:
11111111 11111111 11111111 11111111

2.正數(shù)的整型提升

高位補充符號位,即補0

char a=1;
變量a的二進制位(補碼)中只有8個比特位:
00000001
因為char是無符號的char
所以整型提升的時候,補符號位,即補0
提升結(jié)果:
00000000 00000000 00000000 00000001

3.無符號的整型提升

無符號整型提升,高位補0(無符號只有正數(shù))


三、整型提升實例

例1:

#include <stdio.h>
int main()
{
	char a = 5, b = 127;
	char c = a + b;
	int d = a + b;
	printf("c=%d\n", c);
	printf("d= %d", d);
	return 0;
}

運行結(jié)果:

c=-124
d=132

分析:

char a=5
0000 0101 --> a=5
char b=127
0111 1111 --> b=127
因為參與了運算,并且char類型的精度小于int類型,所以這里進行整型提升:
00000000 00000000 00000000 00000101 --> a=5
00000000 00000000 00000000 01111111 --> b=127
00000000 00000000 00000000 10000100 --> c=132

//1:>

將結(jié)果存入類型為char的變量c中,c只能存儲8位,所以保留結(jié)果最后81000 0100 --> c=132
由于char類型也是有正負的,且計算結(jié)果是以補碼形式,轉(zhuǎn)化為原碼
補碼:1000 0100
反碼:1000 0011
原碼:1111 1100 --> -124
原碼值為-124

//2:>

運算還是先整型提升再運算,二進制同上,最后結(jié)果存放到int類型的b中,所以直接就是132

例2:

#include<stdio.h>
int main()
{
	char a = 0xb6;
	short b = 0xb600;
	int c = 0xb6000000;
	if (a == 0xb6)
		printf("a");
	if (b == 0xb600)
		printf("b");
	if (c == 0xb6000000)
		printf("c");
	return 0;
}

運行結(jié)果:

c

分析:

a=0xb6
整型提升前:10110110 
整型提升后:11111111 11111111 11111111 10110110 可以直接看出這是一個負數(shù)的補碼
b=0xb600
整型提升前:10110110 00000000
整型提升后:11111111 11111111 10110110 00000000 可以直接看出這也是一個負數(shù)的補碼
c=0xb6000000
無需整型提升,故結(jié)果為真

例3:

#include<stdio.h>
int main()
{
	char c = 1;
	printf("c=%u\n", sizeof(c));//%u按無符號整形unsigned int打印
	printf("c=%u\n", sizeof(+c));
	printf("c=%u\n", sizeof(-c));
	return 0;
}

運行結(jié)果:

c=1
c=4
c=4

分析:

sizeof(c),c沒有參與運算,故就是求char類型大小
sizeof(+c),sizeof(-c),c參與運算,整型提升為int,故就是求int類型大小

四、算術(shù)轉(zhuǎn)移

如果某個操作符的各個操作數(shù)屬于不同的類型,那么除非其中一個操作數(shù)轉(zhuǎn)換為另一個操作數(shù)的類型,否則操作就無法進行,下面的尋常算術(shù)轉(zhuǎn)換。

//從高到低
long double
double
float
unsigned long int
long int
unsigned int
int

注:
如果在同一運算中操作數(shù)類型不同,等級低的要往等級高的轉(zhuǎn)換。
算術(shù)轉(zhuǎn)換要合理,否則會存在潛在的問題

例1:

float f=3.14;
int num=f;//隱式轉(zhuǎn)換,精度丟失

例2:

#include<stdio.h>
int main()
{
	unsigned char a = 0;
	unsigned char b = 255;
	unsigned char c = 255;
	a = b + c;
	printf("a = %d\n", a);
	return 0;
}

運行結(jié)果:

a = 254

分析:

b和c的值都需要提升為整型,再執(zhí)行加法運算

b\c:>
整型提升前:11111111
整型提升后:11111111 11111111 11111111 11111111

 11111111 11111111 11111111 11111111 --> b
 11111111 11111111 11111111 11111111 --> c
111111111 11111111 11111111 11111110 --> a
 結(jié)果保留最后的811111110 --> 補碼
 由于是無符號char類型,那么原反補一樣
 原碼也是11111110 即為254

總結(jié)

發(fā)生轉(zhuǎn)換的原因:
硬件:CPU寄存器的比特位是統(tǒng)一的,將內(nèi)存中的數(shù)據(jù)放入寄存器中就會發(fā)生隱式轉(zhuǎn)換
軟件:C語言的操作符對多個操作數(shù)進行操作時,必須保證其類型一致


五、操作符的屬性

1.操作符

復(fù)雜表達式的求值有三個影響的因素。

  1. 操作符的優(yōu)先級。決定了有多個操作符和多個操作數(shù)時,先執(zhí)行哪部分。
  2. 操作符的結(jié)合性。當優(yōu)先級相同,多個或單個操作符之間從左向右執(zhí)行還是從右向左執(zhí)行。
  3. 是否控制求值順序。特定的某些表達式在進行求值,根據(jù)不同的條件產(chǎn)出不同的求值過程。

兩個相鄰的操作符先執(zhí)行哪個?取決于他們的優(yōu)先級。如果兩者的優(yōu)先級相同,取決于他們的結(jié)合性。

2.操作符優(yōu)先級

操作符優(yōu)先級,從上往下,重點的

操作符 結(jié)合性 是否控制求值順序
() N/A
, L-R
-> L-R
++ L-R
L-R
++ R-L
R-L
* R-L

3.問題表達式

表達式1

a*b + c*d + e*f

注釋:代碼1在計算的時候,由于乘法的優(yōu)先級比+的優(yōu)先級高,只能保證的乘法計算是比+早,但是優(yōu)先級并不能決定第三個*比第一個+早執(zhí)行。

所以表達式的計算機順序就可能是:

a*b
c*d
a*b + c*d
e*f
a*b + c*d + e*f
或者:
a*b
c*d
e*f
a*b + c*d
a*b + c*d + e*f

表達式2

非法表達式1

int main()
{
	int i = 10;
	i = i-- - --i * (i = -3) * i++ + ++i;
	printf("i = %d\n", i);
	return 0;
}

非法表達式2

int fun()
{
     static int count = 1;
     return ++count; }
int main()
{
     int answer;
     answer = fun() - fun() * fun();
     printf( "%d\n", answer);//輸出多少?
     return 0; }

這兩個表達式,鐵汁們要好好思考這為什么是非法的,不懂得可以私信小羊哦

總結(jié):

我們寫出的表達式如果不能通過操作符的屬性確定唯一的計算路徑,那這個表達式一定存在問題


好了,今天小羊分享的C語言的隱式類型轉(zhuǎn)換規(guī)則就講到這里了,歡迎大家評論區(qū)留言~~

『C語言初階』第八章 -隱式類型轉(zhuǎn)換規(guī)則,C語言初階知識,c語言,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-647284.html

到了這里,關(guān)于『C語言初階』第八章 -隱式類型轉(zhuǎn)換規(guī)則的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java核心知識點1-java和c++區(qū)別、隱式和顯示類型轉(zhuǎn)換

    Java核心知識點1-java和c++區(qū)別、隱式和顯示類型轉(zhuǎn)換

    java和c++區(qū)別 java通過虛擬機實現(xiàn)跨平臺特性,但c++依賴于特定的平臺。 java沒有指針,它的引用可以理解為安全指針,而c++和c一樣具有指針。 java支持自動垃圾回收,而c++需要手動回收。 java不支持多重繼承,只能通過實現(xiàn)多個接口來達到相同目的,而c++支持多繼承。 ?隱式(

    2024年02月03日
    瀏覽(19)
  • 【C語言】表達式求值相關(guān)問題匯總—>隱式類型轉(zhuǎn)換(整型提升)、算數(shù)轉(zhuǎn)換與操作符優(yōu)先級匯總(收藏查閱)

    【C語言】表達式求值相關(guān)問題匯總—>隱式類型轉(zhuǎn)換(整型提升)、算數(shù)轉(zhuǎn)換與操作符優(yōu)先級匯總(收藏查閱)

    ??? 樊梓慕: 個人主頁 ? ?? 個人專欄: 《C語言》《數(shù)據(jù)結(jié)構(gòu)》《藍橋杯試題》 ?? 每一個不曾起舞的日子,都是對生命的辜負。 目錄 前言: 一、隱式類型轉(zhuǎn)換 (一)整型提升的意義 (二)如何進行整型提升呢? 二、算數(shù)轉(zhuǎn)換 三、操作符的屬性 (一)操作符優(yōu)先級匯

    2024年02月16日
    瀏覽(21)
  • 考研C語言第八章

    考研C語言第八章

    這個東西看著像數(shù)據(jù)庫里面屬性的定義,也像java里面的類的定義 關(guān)于結(jié)構(gòu)體里面scanf讀取輸入的數(shù)據(jù),并進行相關(guān)的存儲, 這里面字符串就像之前的,取數(shù)據(jù)時可以和前面的不加空格,可以不加取地址符號 (但是為了好記和規(guī)范,建議直接所有的一視同仁) 就想數(shù)據(jù)庫在輸

    2024年02月10日
    瀏覽(23)
  • MySQL隱式類型轉(zhuǎn)換

    MySQL隱式類型轉(zhuǎn)換

    當運算符與不同類型的操作數(shù)一起使用時,會發(fā)生類型轉(zhuǎn)換以使操作數(shù)兼容。有些轉(zhuǎn)換是隱式發(fā)生的。例如,MySQL會根據(jù)需要自動將字符串轉(zhuǎn)換為數(shù)字,反之亦然。 如果一個或兩個參數(shù)都為 NULL ,則比較結(jié)果為 NULL 。但是相等比較運算符 = 除外,對于 NULL=NULL ,結(jié)果為1,不需

    2023年04月23日
    瀏覽(18)
  • 自然語言處理: 第八章chatGPT的搭建

    自然語言處理: 第八章chatGPT的搭建

    Transformer 大模型家族可以分成三類, 至于三者的區(qū)別可以參考上一章: Encoder-only, Decoder-only, 只需要Pre_train Encoder-decoder , 可以在一些任務(wù)上無需進行fine_tune 必須要在下游任務(wù)進行微調(diào)比如Bert , Bart 。 T5 這種無需要微調(diào)就能完成一些任務(wù) 。最后GPT從3開始,只需要預(yù)訓(xùn)練就能適

    2024年02月12日
    瀏覽(22)
  • 《匯編語言》王爽(第四版)第八章 實驗7

    《匯編語言》王爽(第四版)第八章 實驗7

    文章目錄 前言 一、題目 二、分析 1.內(nèi)存分配情況 2.數(shù)據(jù)結(jié)構(gòu)分析 3.實現(xiàn)思路 (1)設(shè)置段寄存器 (2)復(fù)制“年份”數(shù)據(jù) (3)復(fù)制“年總收入”數(shù)據(jù) (4)復(fù)制“雇員人數(shù)”數(shù)據(jù) (5)計算“人均收入” 三、代碼 1.實現(xiàn)代碼 2.優(yōu)化代碼 3.最終代碼 總結(jié) 王爽老師《匯編語言》

    2024年02月04日
    瀏覽(24)
  • JS隱式轉(zhuǎn)換與類型比較

    隱式轉(zhuǎn)換(Implicit Conversion)是指在表達式求值或操作中自動發(fā)生的類型轉(zhuǎn)換。當使用不同的數(shù)據(jù)類型進行操作時,JavaScript 會自動進行類型轉(zhuǎn)換以滿足操作的要求。 隱式轉(zhuǎn)換在編寫邏輯時經(jīng)常會出現(xiàn),特別是在需要進行判斷的邏輯場景中。舉個例子: 需要注意的是,隱式轉(zhuǎn)

    2024年02月07日
    瀏覽(18)
  • 【C語言初階】帶你輕松掌握指針基礎(chǔ)知識(1)——指針的定義,類型,大小

    【C語言初階】帶你輕松掌握指針基礎(chǔ)知識(1)——指針的定義,類型,大小

    君兮_的個人主頁 勤時當勉勵 歲月不待人 C/C++ 游戲開發(fā) Hello,這里是君兮_,最近剛回家有點懶,從今天開始恢復(fù)更新并開始更新新的刷題系列,我們先繼續(xù)更新0基礎(chǔ)入門C語言的內(nèi)容,今天給大家?guī)淼氖侵羔樂矫娴膬?nèi)容,但由于是初階,一些高級的用法我們放在進階篇再講

    2024年02月12日
    瀏覽(32)
  • 【c++】類和對象(六)深入了解隱式類型轉(zhuǎn)換

    【c++】類和對象(六)深入了解隱式類型轉(zhuǎn)換

    ??個人主頁 : Quitecoder ?? 專欄 : c++筆記倉 朋友們大家好,本篇文章我們來到 初始化列表,隱式類型轉(zhuǎn)換以及explicit的內(nèi)容 在創(chuàng)建對象時,編譯器通過調(diào)用構(gòu)造函數(shù),給對象中各個成員變量一個合適的初始值 雖然上述構(gòu)造函數(shù)調(diào)用之后,對象中已經(jīng)有了一個初始值,但是

    2024年04月13日
    瀏覽(19)
  • c++中static靜態(tài)成員變量和靜態(tài)成員函數(shù)、explcit和隱式類型轉(zhuǎn)換、友元函數(shù)()詳解

    聲明為 static 的類成員 稱為 類的靜態(tài)成員 ,用 static 修飾的 成員變量 ,稱之為 靜態(tài)成員變量 ;用 static 修飾 的 成員函數(shù) ,稱之為 靜態(tài)成員函數(shù) 。 靜態(tài)成員變量一定要在類外進行初始化 ? 靜態(tài)成員 為 所有類對象所共享 ,不屬于某個具體的對象,存放在靜態(tài)區(qū) ? 靜態(tài)成

    2024年02月04日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包