表示式求值的順序一部分是由操作符的優先順序和結合性決定,同樣,有些表示式的運算元在求值的過程中可能需要準換為其它型別。
隱式型別轉換:c的整型算術運算總是至少以預設型別的精度來進行的,為了獲得這個精度,表示式中的字元和短整型運算元在使用之前被轉換為普通整形,這種轉換稱為整形提公升。
如:char a,b,c; a=b+c;b和c的值被提公升為普通整形,然後在執行加法運算。
加法運算完成之後,結果將被截斷,然後在儲存於a中。
如:a=(~a^b<<1)>>1;
在求補和左移操作時,8位的精度是不夠的,標準要求進行完整的整型求值,所以對於這類表示式的結果,是不會存在歧義的,所以我們不用進行整形提公升。
算術轉換:如果某個運算元的各個運算元屬於不同的型別,那麼除非其中乙個運算元的轉換為另乙個運算元的型別,否則操作就無法進行 。
操作符的屬性:複雜表示式的求值應該遵循這三個規則,造作符的優先順序,操作符的結合性,是否控制求值順序。兩個相鄰的操作符先執行哪個,取決於他們的優先順序,如果兩者的優先順序相同,則取決於他們的結合性。
我們不能寫出依賴求值順序的表示式,這樣的表示式是不可移植的,比如說,我們不能寫出這樣的表示式,c+--c,因為我們沒有辦法知道,+操作符的左運算元的獲取在右運算元之前還是之後求值,所以結果是不可**的。
我們不能寫出依賴求值順序的表示式,這樣的表示式是不可移植的,是有歧義的。
int:預設是有符號的。
表示式求值
程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...
表示式求值
既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...
表示式求值
寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...