C語言賦值時產生的臨時量,類型比較時轉換,和怎麼觀察預編譯後的程序結果

C語言的一些零碎基礎知識

if()
{}
else if()
{}
else if()
{}
else
在上面的if嵌套結構中結尾的else時和最後面的else if結合的,這就是所謂的就近原則

首先在給變量賦值的時候要注意格式

int a=10//十進制
int a=010//八進制
int a=0x10//十六進制

下面是查看預編譯的結果

下面是關於程序生成的過程:首先.c和.cpp文件被稱爲ASCII字符的文本文件,然後經過預編譯形成.i文件(在預編譯時主要的功能是:宏定義、文件包含、條件編譯。),然後經過編譯形成.o/.obj文件,隨後經過鏈接可以形成.exe可執行文件。
這裏爲了方便大家理解預編譯所幹的事,我在下面附上對編譯器的流程截圖(本人使用的是vs2013)另外注意在開啓這個功能後程序生成是隻執行預編譯功能。
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏將預處理到文件從是改爲否就設置成功了。
然後選中“在文件資源管理器中打開文件夾在這裏插入圖片描述
在這裏插入圖片描述
打開Debug文件夾,在這裏插入圖片描述
右鍵.i文件,選擇編輯,然後會進入記事本,將記事本的移動條拖到最下面,就可以看見程序預編譯後的結果,也就可以知道程序在預編譯是幹了什麼事了。
+++++++++++++++++分割線+++++++++++++++++++++++++++

在cpu中,只做加法處理,位移操作和取反,所以用補碼存放數據十分重要,因爲採取補碼後,可以把減法變爲加上其補碼的加法運算。
在變量賦值時,會生成一個臨時量作爲橋樑來進行賦值預算。且臨時量只能讀取不能修改,具有常性
比如++a=c在編譯時可以通過,但++a是一個表達式。之所以通過編譯是因爲,++a是前置加加,它的操作時將a放入一個臨時量,在對臨時量進行加加處理,然後在賦值給a。
a++=c,這樣編譯不能通過這是因爲,後置加加的執行順序爲,將a放入臨時量,然後將c的值給a的臨時量,再將臨時量還給a,再將a放入臨時量,在對其加加,在將臨時量還給a。但是在將c的值給a的臨時量時,這一步就出現了錯誤,因爲臨時量是不允許被修改的。

在不同類型變量的比較時,系統會進行類型轉換(針對於基本數據類型),有符號類型和無符號類型比較時會先轉換爲無符號類型(unsigned),當int,float,double類型比較時都會轉換爲double類型在比較。
他們的優先級從低到高爲:
bool/char/short->int->usigned->double->long double
正式因爲存在這種類型轉換所以會出現以下的情況

int a=-5<usigned int b=10;

另外sizeof(int)=4這個4時無符號int 類型的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章