C語言中的典型問題(2)

2021-08-14 23:56:27 字數 2927 閱讀 4373

1.運算子優先順序

在乙個表示式中可能包含多個有不同運算子連線起來的、具有不同資料型別的資料物件;由於表示式有多種運算,不同的運算順序可能得出不同結果甚至出現錯誤運算錯誤,因為當表示式中含多種運算時,必須按一定順序進行結合,才能保證運算的合理性和結果的正確性、唯一性。優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。表示式的結合次序取決於表示式中各種運算子的優先順序。優先順序高的運算子先結合,優先順序低的運算子後結合,同一行中的運算子的優先順序相同。優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。相同優先順序中,按結合順序計算。大多數運算是從左至右計算,只有三個優先順序是從右至左結合的,它們是單目運算子、條件運算子、賦值運算子基本的優先順序需要記住:指標最優,單目運算優於雙目運算。如正負號。先乘除(模),後加減。先算術運算,後移位運算,最後位運算。請特別注意:1 << 3 + 2 & 7等價於 (1 << (3 + 2))&&7.邏輯運算最後計算。

2.什麼叫暫存器變數

暫存器是cpu的一部分,是計算機中速度最快的儲存器,分為 通用暫存器、專用暫存器、段暫存器、其他暫存器,每個暫存器儲存一種型別的變數,各司其職,這樣說來,又分為累加器、源變址暫存器、基址暫存器、計數暫存器、狀態暫存器等等暫存器變數,顧名思義,就是存貯在暫存器裡的變數。由於操作暫存器的速度遠高於操作記憶體,但暫存器的數量有限,所以把最頻繁使用的資料儲存在暫存器裡,有效地提高程式執行速率。c語言定義為 register int a;在程式執行時,根據需要到記憶體中相應的儲存單元中呼叫,如果乙個變數在程式中頻繁使用,例如迴圈變數,那麼,系統就必須多次訪問記憶體中的該單元,影響程式的執行效率。因此,c\c++語言還定義了一種變數,不是儲存在記憶體上,而是直接儲存在cpu中的暫存器中,這種變數稱為暫存器變數。

3.宣告和定義的區別

宣告就是指給除了當前變數或者函式,或者類什麼的名字,不給其中的內容,就是先告訴你有這樣乙個什麼型別的變數或者函式,但是這個變數或者函式的具體資訊卻是不知道的。就好比跟你介紹乙個人的時候,宣告就是只告訴你這個人叫什麼,但是缺不給你說這個人到底怎麼樣,他有哪些優點,缺點,喜好問題是什麼的。定義就不一樣了,定義直接告訴你了所有的東西,這個變數是什麼,這個函式是什麼功能,這個類裡面包含了什麼東西。很具體的說明。當然一般對於變數來說,我們不怎麼區分宣告或者定義之類的,一般沒有人去說我要宣告乙個變數,然後定義這個變數什麼的。要說都是直接說定義變數。宣告一般都是對函式或者類來說的,宣告在前,定義在後。int a;可以說是宣告,廣泛的說是定義乙個變數a,也不算錯。

4.有符號與無符號的區別

最明顯的區別就是二者表示的範圍不同:無符號數中,所有的位都用於直接表示該值的大小。有符號數中最高位用於表示正負,所以,當為正值時,該數的最大值就會變小。我們舉乙個位元組的數值對比: 無符號數: 1111 1111 值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20 有符號數: 0111 1111 值:127 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20  同樣是乙個位元組,無符號數的最大值是255,而有符號數的最大值是127。原因是有符號數中的最高位被挪去表示符號了。並且,我們知道,最高位的權值也是最高的(對於1位元組數來說是2的7次方=128),所以僅僅少於一位,最大值一下子減半。不過,有符號數的長處是它可以表示負數。因此,雖然它的在最大值縮水了,卻在負值的方向出現了伸展。我們仍乙個位元組的數值對比: 無符號數: 0 ----------------- 255 有符號數: -128 --------- 0 ---------- 127  同樣是乙個位元組,無符號的最小值是 0 ,而有符號數的最小值是-128。所以二者能表達的不同的數值的個數都一樣是256個。只不過前者表達的是0到255這256個數,後者表達的是-128到+127這256個數。

5.各種資料型別的大小

(1)char型別一般是8bit,但ansi c裡沒有硬性規定其長度,某些嵌入式編譯器可能是16bit

(2)short和long型別的長度不相同

(3)int型別通常同具體機器的物理字長相同

(4)short通常是16bits, int通常是16bits or 32bits每種編譯器可以根據硬體的不同自由確定, 但是short和int必須最少是16bits, 而long型別必須最少是32bits, 並且short必須比int和long型別要短。

2.32位機上型別長度

size of char: 1

size of int: 4

size of long:4

size of float:4

size of long long:8

size of double:8

size of long double:12

size of char * :4

3.64位機上型別長度

size of char:1

size of int:4

size of long :8

size of float :4

size of long long:8

size of double:8

size of long double:16

size of char * :8

4.16位機型別長度

char: 1

int: 2

long:4

unsigned int:2

unsigned short:2

unsigned long:4

float:4

size of char * :4

C語言中的典型問題(3)

指標中的問題 1 指標是什麼?起什麼作用?指標是變數的一種,就像其他的變數一樣,只不過其他的變數裡面儲存的是乙個具體的東西,也不應該說是具體。應該說是直觀的東西,而指標變數就不一樣了,指標變數裡面儲存的是位址,在通過這個位址找到要找的資料,打個比方來說,指標就像是乙個郵箱,你先要輸入郵箱的位址才能找...

C語言中的typedef問題

1.基本解釋 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料類 型 int,char等 和自定義的資料型別 struct等 在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一 些比較複雜的型別宣告。至於...

C語言中union REGS問題

c語言中union regs問題 2009 5 19 22 45 提問者 xac210 瀏覽次數 1945次 在c語言中,union regs結構體是怎麼定義的,還有它一般是用在哪方面問題上的。希望大家能給我點詳細的介紹.謝謝!我來幫他解答 檢舉 2009 5 20 02 18 滿意回答 vc 沒有...