freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

c語言知識總結(參考版)

2024-11-07 20:39本頁面
  

【正文】 特別。 i i 參與運算后, i 的值再自減 1。 i i 自減 1 后再參與其它運算。 C 語言 知識總結 18 ? 避免掉入 “ ==” 筆誤 陷阱 在邏輯判斷中,如果將常量寫在“ ==”的左邊,將變量寫在右邊,即使出現筆誤將“ ==”寫成“ =”,由于“ =”的左邊不能為常量,編譯器會很容易檢查到這個錯誤,不會將問題帶到運行時,在編譯時就被消滅掉了。 } } 有人說輸出結果為: 0,1,2,3,4,5 6,7,8,9, 可是上機一執(zhí)行,不僅輸出結果和預期不符,而且還是個死循環(huán) ,這是什么原因? 都是“ =”號惹的禍。 i++) { if(i=5) { printf(%d, i)。 for(i=0。為了消除這種負面影響,強烈建議不要使用默認的優(yōu)先級,而是使用“ ( )”由程序員自己控制表達式的執(zhí)行順序。 發(fā)表一個個人觀點,實際上 運算符優(yōu)先級 就 是結合 的 優(yōu)先級,意指:高優(yōu)先級的運算符所結合的變量或表達式,不能被低優(yōu)先級的運算符分離。 ( 2) 如果兩側運算符優(yōu)先級相同, 則按運算符的結合性所規(guī)定的結合方向處理。 算術運算符和算術表達式 運算符和表達式 部分主要包括 兩 個 知識 點 : 優(yōu)先級 和 結合性 。 ? 為什么負數在符號位擴展時擴展的位要補 1,而不是 0? 整型數局在內存中是以補碼的形式存在的,并且對于負整型數 x有 [x]原 = [x]補按位取反 + 1 這下就清楚了。 顯示 a+1 時, 首先要計算 a+1 的值,就像計算 b的值一樣,其結果為 128,只是不用再轉換為char 型。 時,首先將 a轉換成 int 型,與 1 相加,得到的結果為 128(0x80),再轉換為 char 型,前 24 位全部丟失, b 的值 0x80,即 128,出現加法溢出 。 答: 127, 128, 128 明明是 b = a + 1, 而輸出的 的 b 和 a+1 的值 卻 不一樣 ,這是什么道理? 同樣是 數據 類型轉換和符號位擴展,卻與上面的題目小有差別 。 //0x7F char b = a + 1。 0x80 是一個負數,符號位擴展時,擴展的 24 位全部補 1,程序有這樣的執(zhí)行結果也就理所當然了。 C 語言 知識總結 16 ? 這個問題包含兩個知識點 :( 1)隱式類型轉換;( 2)符號位擴展。 //0x7F printf(%x, a)。 符號 位 擴展發(fā)生在將占內存字節(jié)數較少的數據轉換到占內存字節(jié)數較多的數據時,比如 char short, char int 等。 ? char 型和 short 型參與運算時,必須先轉換成 int 型。 下圖表示了類型自動轉換的規(guī)則。 ( 5) 在賦值運算中,賦值號兩邊量的數據類型不同時,賦值號右邊量的類型將轉換為左邊量的類型。 ( 3) 所有的浮點運算都是以雙精度進行的,即使僅含 float 單精度量運算的表達式,也要先轉 換成 double 型,再作運算。 ( 2) 轉換按數據長度增加的方向進行,以保證精度不降低。自動轉換發(fā)生在不同數據類型的量混合運算時,由編譯系統自動完成。 數據類型轉換 變量的數據類型是可以轉換的。 各類數值型 數據 間的 混合運算 數據類型 混合運算涉及兩方面知識: ( 1) 數據類型轉換 ( 2) 數據符號為擴展 兩個方面相互結合,可謂 機關重重,陷阱密布,稍不留神就可能導致重大程序缺陷(一點都不夸張 ) 。a39。和字符串常量 a雖然都只有一個字符,但在內存中的情況是不同的。 例如: 字符串 C program 在內存中所占的字節(jié)為: C p r o g r a m \0 字符常量 39。增加的一個字節(jié)中存放字符 ?\0?(ASCII碼為 0)。 C 語言 知識總結 14 ? 字符常量占一個字節(jié)的內存空間。在C語言中沒有相應的字符串變量。 ? 字符常量只能是單個字符,字符串常量則可以含一個或多個字符。 字符串常 量和字符常量是不同的量。 字符串常量 字符串常量是由一對雙引號括起的字符序列。在輸出時,允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。 實際上是在 a,b 兩個單元內存放 120 和 121 的二 進制代碼: a: 0 1 1 1 1 0 0 0 b: 0 1 1 1 1 0 0 1 所以也可以把它們看成是整型量。 b=39。值: a=39。和 39。對字符變量 a,b 賦予 39。字符值是以 ASCII 碼的形式存放在變量的內存單元之中的。 ? 注意 :字符常量事用單引號括起來的,不能用雙引號或其它括號。 在32 位系統中,地址是一個 32 位無符號整數,賦值給字符變量時,無疑會發(fā)生隱式類型轉換 ,將地址的第 8 位賦值給 c,其余的 24 位全部丟失。 再回到 char c = “a”。 想知道字符串常量究竟是什么東西,先 看看語句 char *p = “a”。 暫且不 管語法 上 的錯誤 , 將錯就錯的 問一下, 語句 char c = “a”。 上面的程序顯然有問題, 第一句中將字符串常量賦值給字符變量在 語法 上 顯然 是錯誤的,但編譯器 不一定會報 error, 可能 會 報 一個 warning。 char d = c+1。當然也可以使用 ”\n\r”。 而其它編譯器就不一定了 ,也許會移到下一行的當前列。 不同編譯器對它的解釋是不一樣的。 ?\r?應該是英文 return 的首字母, 毋庸置疑,就是回車,把光標移到當前行的行首 。 ? 回車和換行 回車是將光標移到當前光標所在行的行首;換行是將光標移到當前光標所在行的下一行,移到后光標所在的列數為當前光標所在的列; 回車換行是將光標移到下一行的行首 。 ddd 和 hh 分別為八進制和十六進制的 ASCII 代碼。 單引號符 39 \” 雙引號符 34 \a 鳴鈴 7 \ddd 1~ 3 位八進制數所代表的字符 \xhh 1~ 2 位十六進制數所代表的字符 C 語言 知識總結 12 廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。轉義字符主要用來表示那些用一般字符不便于表示的控制代碼。轉義字符具有特定的含義,不同于字符原有的意義,故稱“轉義”字符。 轉義字符 轉義字符是一種特殊的字符常量。539。和 5 是不同的。如 39。 ? 字符可以是字符集中任意字符。 在C語言中,字符常量有以下特點: ? 字符常量只能用單引號括起來,不能用雙引號或其它括號。?39。+39。=39。b39。a39。 字符型數據 字符常量 字符常量是用單引號括起來的一個字符。 這樣問題就很清楚了,對于 a, VC 雖然為其保留 6 位小數,但有效小數位只有 2 位,從第 3位開始的“ 2031”都是無效的小數位;對于 b,完全是由于 VC 保留 6 位小數的緣故,將小數部分截短了。 printf(%f\n%f\n,a,b)。 a=。 數據的舍入誤差 在 中,測試一下下面程序的輸出結果 main() { float a。 ? 小數部分占的位( bit)數愈多,數的有效數字愈多,精度愈高。以 32 位實型實數 為例,其在內存中的存放形式如下: + .314159 1 符 號 小數部分 指數 ? ? 最高位表示符號位,固定占用 1 個字節(jié), 0 表示正數, 1 表示負數。 實型 數據的分類 實型變量分為:單精度( float型)、雙精度( double 型)和長雙精度( long double 型)三類。后綴為“ f”或“ F”即表示該數為浮點數。 其一般形式為: a E n( a 為十進制數, n 為十進制整數) , 其值為 a*10n。注意,必須有小數點。 ? 十進制數形式:由數碼 0~ 9 和小數點組成。在C語言中,實數只采用十進制。 實型數據 實型常量 實型也稱為浮點型。 a 的內存值為 0x7F, b=a+1,則 b 的內存值為 0x80, 其最高位為 1,不再是一個 正 數, 因此 b的值不是 128, 計算 的數值部分 產生了溢出。 //0x7F char b = a + 1。 整型數據的溢出 char 可以看成特殊的整型數據, 為了方便講解, 這里以 char 為例。 //0x7FFFFFFF 就沒有任何問題了。 typedef int int32。 endif ifdef __SYSA__ typedef char int8。 typedef short int16。 2 如何消除數據類型對可移植性的影響 為了使程序能夠在不同的平臺上相互移植,而不會因為數據類型在不同平臺上的長度而產生不兼容,可以通過定義數據類型別名的方式來達到這一目的。 對于賦值語句 int n=2147483647。 對于無符號整型數來說, 不存在 符號位, 所有數據位 在 計算 數值大小時都是有意義的 。 16 位整型數 10 在內存中的存放如下: 10 的原碼: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 取反: 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 再加 1,得 10 的補碼,就是其在內存中的存放形式 : 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 C 語言 知識總結 8 對于有符號整型數來說,其最高位為符號位, 只代表正負,不 參與 數 據絕對 值的 計算 。 ? 正 數的補碼和其原碼相同。 ? 對于正整數 x,恒有的 [x]原 = [x]補 。而通過計算你會發(fā)現, y[x]絕對值所得出的數,正好是將 x 除了符號位以外,其他各位取反所得出來的結果,再加上那個 1,就得出 “ 取反加一 ” 的道理了。 2 原碼、反碼 和 補碼 的 計算公式 [x]補 = [x]絕對值 按位取反 + 1 [x]原 = [x]補 按位取反 + 1 ? 根據 補碼的時鐘原理 ,就很好理 解 補碼的計算公式 了 。 根據上面的事例,我們可以將退回 3 格量化得出負數 3,這個負數可以使得 5 點調整為 2 點,現在我們想用加法來實現這一目的,這就需要求得 3 的補碼,這個補碼是一個正數,它就是 12+( 3)=123=9?,F在解釋一下第二種方式, 5點加上 9個小時是多少?是 14。 舉個簡單例子,有一只需要調整的鐘表(假定以 12小時計時),假如鐘表上顯示的時間是 5 點整,而現在標準時間是 2 點整,那么要把時針從 5 點調整到 2 點,可 以通過兩種途徑:一種是沿逆時針方向把時針退回( 52) =3 格;另一種就是沿順時針方向讓時針前進 {12( 52) }={123}=9 格。 補碼 (了解) 1 補碼的時鐘原理 在進行數據運算的時候,尤其是 2 進制的運算時,經常遇到補碼的表示形式,我們都知道,負數的的補碼是 其絕對值 取反,然后在末位加上 1。一般的編譯器都會以一個機器字存放一個 int。 ? ? ANSI C標準沒有規(guī)定整數類型 的具體長度,只是要求 long型數據的長度不短于 int型, short型不長于 int 型。 思考一下下面 兩種說法是否正確? ( 1) int 型的長度 是 short 型 的 2, long 型的長度 是 int 型的 2 倍 。 ? 無符號短整型:類型說明符為 unsigned short。 ? 長整型:類型說明符為 long int 或 long,在內存中占 4 個字節(jié)。 ? 短整量:類型說明符為 short int 或 short。 ? 強烈 不建議 程序中存在對 8 進制和 16 進制整數 進行取相反數操作這樣的表達方式。 ? 8 進制和 16 進制整數 雖無正負之分,但仍然可以進行取反 (相反數) 操作 。 根據這一原理, 回到上面 的題目 , 有 0xFFFFFFFF = 0 0xFFFFFFFF 對于 0xFFFFFFFF,從字面上理解 0xFFFFFFFF 相當于由符號整數的 1,對其取反,得到的結果為 1; 對于 0 0xFFFFFFFF, 0首先被轉換為無符號整數,然后減去無符號整數 0xFFFFFFFF,減法溢出,所得結果為 0x01,轉換為 有 符號整數 ,結果也為 1。 這 一 句 只是說 8 進制和 16 進制整數 沒有正負之分, 并沒有說無符號數不允許進行取反 (相反數)操作。
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1