欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言表達式求值中類型轉換和優(yōu)先級等問題詳解

 更新時間:2023年05月30日 10:07:49   作者:夏微涼(●'?'●)  
表達式求值是一個常見的問題,可以用C語言實現,下面這篇文章主要給大家介紹了關于C語言表達式求值中類型轉換和優(yōu)先級等問題的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

1.隱式類型轉換

C的整型算術運算總是至少以缺省整型類型的精度來進行的。

為了獲得這個精度,表達式中的字符和短整型操作數在使用之前被轉換為普通整型,這種轉換稱為整型提升

整型提升的意義:

表達式的整型運算要在CPU的相應運算器件內執(zhí)行,CPU內整型運算器(ALU)的操作數的字節(jié)長度 一般就是int的字節(jié)長度,同時也是CPU的通用寄存器的長度。 因此,即使兩個char類型的相加,在CPU執(zhí)行時實際上也要先轉換為CPU內整型操作數的標準長 度。 通用CPU(general-purpose CPU)是難以直接實現兩個8比特字節(jié)直接相加運算(雖然機器指令 中可能有這種字節(jié)相加指令)。所以,表達式中各種長度可能小于int長度的整型值,都必須先轉 換為 int 或 unsigned int,然后才能送入CPU去執(zhí)行運算。

 如何進行整形提升呢?

整形提升是按照變量的數據類型的符號位來提升的

 負數的整形提升

 正數的整形提升

 無符號整形提升,高位補0

分析下面的代碼:

 具體過程如下:

 程序輸出結果:

 分析下面的代碼:

 c只要參與表達式運算,就會發(fā)生整形提升,表達式 +c ,就會發(fā)生提升,所以 sizeof(+c) 是4個字節(jié).

表達式 -c 也會發(fā)生整形提升,所以 sizeof(-c) 是4個字節(jié),但是 sizeof(c) ,就是1個字節(jié).

2.算數轉換

如果某個操作符的各個操作數屬于不同的類型,那么除非其中一個操作數的轉換為另一個操作數的類型,否則操作就無法進行。下面的層次體系稱為尋常算術轉換。

3.操作符的屬性

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

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

2. 操作符的結合性

3. 是否控制求值順序。

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

相鄰操作符優(yōu)先級高的先計算,低的后算。

相鄰操作符的優(yōu)先級相同的情況下,結合性起作用。

即使掌握了各種操作符的優(yōu)先級和結合性,我們也可能回寫出bug:

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

 這串代碼再不同的編譯器下可能會產生不同的結果。

下面的代碼也是錯誤代碼,再不同的編譯器中的結果也有所不同:

 在vs編譯器下ret的結果時12,而在gcc下ret的值時10

總結

到此這篇關于C語言表達式求值中類型轉換和優(yōu)先級等問題詳解的文章就介紹到這了,更多相關C語言類型轉換和優(yōu)先級內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++11并發(fā)編程關于原子操作atomic的代碼示例

    C++11并發(fā)編程關于原子操作atomic的代碼示例

    今天小編就為大家分享一篇關于C++11并發(fā)編程關于原子操作atomic的代碼示例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言中對于循環(huán)結構優(yōu)化的一些入門級方法簡介

    C語言中對于循環(huán)結構優(yōu)化的一些入門級方法簡介

    這篇文章主要介紹了C語言中對于循環(huán)結構優(yōu)化的一些入門級方法,包括算法設計的改進來提高一些并行性等方法,要的朋友可以參考下
    2015-12-12
  • 詳解C++中左值與右值的概念與應用

    詳解C++中左值與右值的概念與應用

    左值(Lvalue)和右值(Rvalue)是C++和其他編程語言中用來區(qū)分表達式的概念。這篇文章主要為大家詳細介紹了它們的概念與應用,需要的可以參考一下
    2023-03-03
  • Qt控件點擊消息獲取的方法詳解

    Qt控件點擊消息獲取的方法詳解

    本文將利用Qt中的QLabel、QPushButton這兩個控件,為大家詳細介紹一下Qt控件點擊消息獲取的方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-06-06
  • 輸入一個字符串,取出其中的整數(實現代碼)

    輸入一個字符串,取出其中的整數(實現代碼)

    輸入一個字符串,內含所有數字和非數字字符。將其中連續(xù)的數字作為一個整數,依次存放到一個數組中,統(tǒng)計共有多少個整數,并輸出這些數
    2013-09-09
  • C語言預編譯#define(預處理)

    C語言預編譯#define(預處理)

    這篇文章主要介紹了C語言預編譯#define(預處理),#define 機制包括了一個機制,允許把參數替換到文本中,這種實現通常稱為宏或者宏定義,下文更多的相關資料介紹需要的小伙伴可以參考一下
    2022-04-04
  • C語言各種操作符透徹理解下篇

    C語言各種操作符透徹理解下篇

    C?語言提供了豐富的操作符,除了上篇中的算術操作符,移位操作符,位操作符,賦值操作符外,還有單目操作符、關系操作符、邏輯操作符、條件操作符等等,讓我們通讀本篇來詳細了解吧
    2022-02-02
  • socket編程的詳細講解

    socket編程的詳細講解

    本文詳細講解了socket編程,它是網絡中經常使用的一門技術,該文章通過大量的代碼來解釋,大家可以參考參考
    2021-08-08
  • C語言實現控制臺五子棋小游戲

    C語言實現控制臺五子棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現控制臺五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++ vector的介紹及常見功能實現

    C++ vector的介紹及常見功能實現

    這篇文章主要介紹了C++ vector的介紹及模擬實現,vector在實際中非常的重要,但在實際中我們只要熟悉常見的接口就可以了,最重要的是理解他的底層原理,要能夠自己模擬實現出一個簡單的vector,本文結合示例代碼給大家詳細介紹,需要的朋友可以參考下
    2023-05-05

最新評論