C語言表示式

2021-10-03 14:57:03 字數 2830 閱讀 4400

逗號表示式

逗號表示式:就是用逗號隔開的多個表示式,從左向右依次執行

exp1,exp2,wxp3,..

....wxpn

注意:整個表示式的結果是最後乙個表示式的結果。

void

test()

下表引用、函式呼叫和結構成員

1. [ ]:下表引用符操作符

運算元 : 乙個陣列名 + 以後索引值

int arr[10]

;arr[9]

=10;[

]:有兩個運算元乙個是arr,另外乙個就是9.

注意:下表引用常用與陣列的遍歷修改

2.( ):函式呼叫操作符

運算元 : 乙個函式名 +

[若干傳遞給函式的引數]

#include

void

test()

void

test2

(const

char

* str)

intmain()

3.訪問乙個結構體成員

.

:結構體.成員名

->

:結構體指標-

>成員名

#include

struct stu

;void

test

(struct stu stu)

void

test2

(struct stu * pstu)

itn main()

表示式求值

眾所周知表示式的求值,一部分有操作符的優先順序和結合性決定,但是還有一部分在求職的過程中需要進行型別轉換才能夠進行計算。

隱式型別轉換:

關於隱式型別轉換,是指發生在沒有明確說明的情況下(c語言風格的強制型別轉換就是屬於我們程式設計師有明確說明的),編譯器自動幫我們執行的型別轉換。通常同型別的資料進行運算、比較和賦值的時候我們是不需要擔心的,這裡我只是說明不同型別的資料進行運算、比較和賦值時,且我們程式設計師沒有指定型別轉換時,編譯器是如何幫我們進行處理型別之間的轉換的,只有知道這個過程,才能讓我們知道程式設計時應該注意和避免的地方。

(1)比int型別小的隱式型別轉換:整型提公升(integer promotion)。

c語言的整形算術運算總是以預設整形的精度來進行的,為了獲得這個精度那麼,表示式中的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換稱為整型提公升

(2) 為什麼要整型提公升(integer promotion)?

我們知道表示式的整形運算要在cpu的相應的運算器件中完成,而這個期間就是邏輯運算單元(alu)我們也叫做整形運算器,alu的運算元長度就是int的位元組長度一也就是32個位元位,同時也就是cpu通用暫存器的長度。那麼此時如果我們要就是計算兩個char型別的相加,而cpu中執的標椎長度是32位,但是char只有8位,如果要進行計算就要先報char型別變成32位然後通過暫存器送入alu進行計算。因此,表示式中比int型別小的型別就要先轉換成int或unsigned int型別,才能計算。而這個轉換過程也就是整形提公升,這也是整形提公升存在的意義;;;;

(3)如何進行整形提公升

整形提公升是按照變數的資料型別的符號位來提公升的

//負數的提公升

char c1 =-1

;變數c1的二進位制位(補碼)中只有8個

位元位:

11111111

因為char為有符號的char

,所以整形提公升時,高位補

符號位,

提公升之後:

11111111111111111111111111111111

//正數的整形提公升

char c2 =

1;變數c1的二進位制位(補碼)中只有8個

位元位:

00000001

因為char為有符號的char

,所以整形提公升時,高位補

符號位,

提公升之後:

00000000000000000000000000000001

//無符號整形提公升,,/*高位補0*/就ok了

//栗子

void

test()

//只要c參加表示式運算就會發生整形提公升,所以+c就會傳送提公升,所以輸出4,而其他沒有發生表示式運算

(4)賦值時的隱式型別轉換

上面說到都是在計算式的隱式型別轉換,但是還要特別說明的就是在進行賦值操作時,賦值運算子右邊的資料型別必須轉換成賦值號左邊的型別,若右邊的資料型別的長度大於左邊,則要進行截斷或捨入操作。

char ch;

int i,result;

float f;

double d;

result = ch/i +

(f*d-i);(

1)首先計算 ch/i,ch → int型,ch/i → int型。(2

)接著計算 f*d-i,由於最長型為double型,故f→double型,i→double型,f*d-i→double型。(3

)(ch/i) 和(f*d-i)進行加運算,由於f*d-i為double型,故ch/i→double型,ch/i+

(f*d-i)→double型。(4

)由於result為int型,故ch/i+

(f*d-i)→double→int,即進行截斷與捨入,最後取值為整型

Go語言 表示式

go語言僅有25個保留的關鍵字,下面我們就列舉下這25個關鍵字 break default func inte ce select case defer gomap struct chan else goto package switch const fallthrough ifrange type...

c語言 表示式的計算

include stack.h 提供棧及其基本操作函式 include mymath.h 提供階乘函式 include include define buffsize 128 define charsize 10 define pi 3.141593 define e 2.718282 define...

C語言 表示式計算次序

c語言裡,優先順序和結合性規則告訴我們哪些符號組成乙個意群,同時這些意群內部如何進行計算的次序始終未定義。在表示式 x f g h g 和 h 組成乙個意群進行乘法運算,單兩者的呼叫可能以任何順序次序出現。同理f 呼叫,可能在乘法之前,也可能在乘法之後,也可能在g 和 h 呼叫之間。唯一可以確定的是...