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

正文內(nèi)容

c語言知識總結(jié)-閱讀頁

2024-11-23 20:39本頁面
  

【正文】 ? 這道題 實際上 是 為了 考查對“ 8 進制和 16 進制只能表示無符號整數(shù),沒有正負之分 ”的理解。 對于數(shù)值 n,其相反數(shù)實質(zhì)是“ n = 0n” 。 ? ? 10 進制有正負之分, 8 進制和 16 進制只能表示無符號整數(shù),沒有正負之分。 ? 進行取反操作時, 應(yīng)該把 8進制和 16 進制整數(shù) 按照有符號數(shù)的補碼來理解,所得的結(jié)果為其代表 的 有符號 整數(shù)的相反數(shù)的補碼。 C 語言 知識總結(jié) 6 整型 變量 ? 基本型:類型說明符為 int,在內(nèi)存中占 2 個字節(jié)。所占字節(jié)和取值范圍均與基本型相同。 unsigned 又可與上述三種類型匹配而構(gòu)成: ? 無符號基本型:類型說明符為 unsigned int 或 unsigned。 ? 無符號長整型 :類型說明符為 unsigned long。 ( 2) short 型數(shù)據(jù)占用 2 個字節(jié), int 型數(shù)據(jù)占用 4 個字節(jié), long 型數(shù)據(jù)占用 8 個字節(jié)。 ? 數(shù)據(jù)類型的長度是與 具體 編譯器相關(guān)的,不同的編譯器上同一種數(shù)據(jù)類型的長度可能是不一樣的。 比如 在 16 位的 TC編譯器 中 , int 型 被解釋為 16 位 的有符號整數(shù) ; 到了 VC 下, NMAKE是一個 32 位編譯器,它 將 int 解釋為 32 位的 有符號整數(shù) 。但是這樣做的道理何在呢?為了弄清原因,可以引用時鐘的原理來加以說明。 第一種方式是我們常用的方式,因為 時鐘 快了 3 個小時,那就讓它退回來 3 小時就 好了,這是減法,但是在計算機的運算中,減法運算相比加法要更加復(fù)雜,所以為了簡化運算,計算機通常會采用加法算法,也就是第二種方式。但是在這個鐘表盤上沒有 14,因為數(shù)字一到 12就進位歸零了,所以這里的 14 其實就是 1412=2, C 語言 知識總結(jié) 7 如此可見,順時針撥動 時針 9 格,也可以調(diào)整到 2 點這個時間。那么,假定在一個 n 進制范圍內(nèi),有一個負數(shù) x, x 的補碼應(yīng)該是多少呢?結(jié)論是, [x]補 =n+x=n[x]絕對值。 這 里暫且以 2 進制形式來表示數(shù)據(jù),不論這個負數(shù)有多少位,在他的取值范圍內(nèi),最大的數(shù)只能是所有位上都是 1 的非負數(shù)(不包括符號位),假定這個數(shù)為 y,但是 y 并不是我們上面所說到的那個進制范圍數(shù) n,因為 n=y+1,所以 [x]補 =y+1+x=y[x]絕對值 +1。 ? ? x為負數(shù)時, 上面的 計算 [x]補 和 [x]原 的 公式 才成立 。 整形數(shù)據(jù)在內(nèi)存中的存放 實際上, 整形 數(shù)據(jù)在內(nèi)存中是以其補碼的形式存放的,而并非其本身。 16 位整型數(shù) 10 在內(nèi)存中的存放如下: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 ? 負數(shù)的補碼是其絕對值的原碼按位取反再加 1。 如果為0,就一定是 非負數(shù)( 0 和正數(shù)) ,如果為 1,一定是負數(shù)。 整型數(shù)據(jù)的可移植性 1 數(shù)據(jù)類型如何影響可移植性 假設(shè)有兩個系統(tǒng) SYSA和 SYSB, SYSA上 int 和 short的長度都是 16 位的, long 是 32 位的,而 SYSB 上的 short 是 16 位的,而 int 是 32 位的。 //0x7FFFFFFF 對于系統(tǒng) SYSB 沒有任何問題,但對于系統(tǒng) SYSA,就會出現(xiàn)整數(shù)溢出,勢必使程序的運行結(jié)果與預(yù)期不符。 ifdef __SYSA__ typedef char int8。 typedef long int32。 typedef short int16。 endif 將上面的 賦值 語句修改為 int32 n n=2147483647。如果程序在系統(tǒng) SYSA上運行,編譯時打開宏 __SYSA__,在 SYSB上運行時,編譯時打開宏 __SYSB__,問題就輕松解決了。 下面 的 程序 執(zhí)行后, 輸出 結(jié)果 是 什么? C 語言 知識總結(jié) 9 char a = 127。 printf(“%d, %d”, a, b)。 根據(jù)公式 [x]原 = [x]補 按位 取反 + 1 計算出 b 的絕對值, 引起最高位為 1,因此 b 的值 為 128。實型常量也稱為實數(shù)或者浮點數(shù)。它有二種形式:十進 制小數(shù)形式,指數(shù)形式。 例如: 、 、 、 、 、 300.、 等均為合法的實數(shù)。 ? 指數(shù)形式:由十進制數(shù),加階碼標志“ e”或“ E”以及階碼(只能為整數(shù),可以帶符號)組成。 如: (等于 *105) (等于 *102) (等于 *107) (等于 *102) 以下不是合法的實數(shù): 345 (無小數(shù)點 ) E7 (階碼標志 E 之前無數(shù)字 ) 5 (無階碼標志 ) (負號位置不對 ) (無階碼 ) 標準C允許浮點數(shù)使用后綴。如 356f 和 的。 C 語言 知識總結(jié) 10 實型 數(shù)據(jù)在內(nèi)存中的存放形式 實型數(shù)據(jù)一般是按指數(shù)形式存儲的。 ? ANSI C 沒有規(guī)定小數(shù)部分和指數(shù)部分所占的字節(jié)數(shù),它們的長度是編譯器相關(guān)的。 ? 指數(shù)部分占的位數(shù)愈多,則能表示的數(shù)值范圍愈大。 double b。 b=。 } 輸出: 為什么會這樣? a 和 b 都不對呀? ? 理解這個問題首先要清楚 2 點:( 1) VC 中單精度數(shù)有效位數(shù)為 7位,雙精度數(shù)有效位數(shù)為 16 位 ;( 2) VC 中小數(shù)點后最多保留 6 位 ,其余四舍五入 。 ? C 語言 知識總結(jié) 11 注意 : 使用實數(shù)時一定要注意舍入誤差。 例如: 39。、 39。、 39。、 39。、 39。 都是合法字符常量。 ? 字符常量只能是單個字符,不能是字符串。但數(shù)字被定義為字符型之后就不能參與數(shù)值運算。539。 39。是字符常量,不能參與運算。轉(zhuǎn)義字符以反斜線 \開頭 ,后跟一個或幾個字符。例如,在前面各例題 printf 函數(shù)的格式串中用到的“ \n”就是一個轉(zhuǎn)義字符,其意義是“回車換行”。 常用的轉(zhuǎn)義字符及其含義 轉(zhuǎn)義字符 轉(zhuǎn)義字符的意義 ASCII代碼 \n 回車換行 10 \t 橫向跳到下一制表位置 9 \b 退格 8 \r 回車 13 \f 走紙換頁 12 \\ 反斜線符 \ 92 \39。表中的 \ddd 和 \xhh 正是為此而提出的。如 \101 表示字母 A , \102 表示字母 B, \134 表示反斜線, \XOA表示換行等。 ‘\r’、 ’\n’ 和 ”\r\n” 這是一個環(huán)境相關(guān)的問題 。 有爭議的是 ?\n?, 可以理解成 next 的首字母。在 VC 下, ?\n?就可以代表換行回車, 把光標移到下一行的行首。 “\r\n”就比較清晰 , 首先 ?\r?將光標定位到當前行的行首,然后的 ?\n?將光標定位到下一行,不管怎樣都回在下一行行首,因此 使用 ”\r\n”會獲得最好的移植性 。 字符變量 看一段程序: char c = a。 printf(%c, d)。如果這個 warning 沒有被重視,將 會 給程序帶來致命的缺陷。 中將字符串常量賦值給字符變量 究竟意味著 什 么 ? ? 要 解答這一問題,首先要明確兩個知識點:( 1) 字符串常量究竟是什么東西?( 2)數(shù)據(jù)類型轉(zhuǎn)換原理。 這一句定義了一個字符指針, 指向字符串常量 ”a”的首地址 ,實際上字符串常量向外展現(xiàn)的是它的地 C 語言 知識總結(jié) 13 址。 內(nèi)存地址實際上是一個無符號整 型 數(shù),將字符串的地址賦值給 c 時 , 無疑發(fā)生了數(shù)據(jù)類型轉(zhuǎn)換 。 因此本屆開頭的程序是可以執(zhí)行的,但結(jié)果是無法預(yù)期的。 字符數(shù)據(jù)在內(nèi)存中的存放形式 每個字符變量被分配一個字節(jié)的內(nèi)存空間,因此只能存放一個字符。 如 x的十進制 ASCII碼是 120, y 的十進制 ASCII碼是 121。x39。y39。x39。y39。C語言允許對整型變量賦以字符值,也允許對字符變量賦以整型值。 整型量為 多字 節(jié)量 (環(huán)境相關(guān) ),字符量為單字節(jié)量,當整型量按字符型量處理時,只有低八位字節(jié)參與處理。例如: CHINA , “C program” , $ 等都是合法的字符串常量。它們之間主要有以下區(qū)別: ? 字符常量由單引號括起來,字符串常量由雙引號括起來。 ? 可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。但是可以用一個字符數(shù)組來存放一個字符串常量。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加 1。這是字符串結(jié)束的標志。a39。 39。在內(nèi)存中占一個字節(jié),可表示為: a a在內(nèi)存中占二個字節(jié),可表示為: a \0 ? 注意 :字符串所占的內(nèi)存 比 字符串長度 大 1 個字節(jié) ,這個 1 就是字符串的結(jié)束符 ?\0?。 萬物有法,只要能夠掌握其中的道理,這些機關(guān)和陷阱也就不攻自破了。轉(zhuǎn)換的方法有兩種,一種是自動轉(zhuǎn)換,一種是強制轉(zhuǎn)換。自動轉(zhuǎn)換遵循以下規(guī)則: ( 1) 若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進行運算。如 int 型和 long 型運算時,先把int 量轉(zhuǎn)成 long 型后再進行運算。 ( 4) char 型和 short 型參與運算時,必須先轉(zhuǎn)換成 int 型。如果右邊量的數(shù)據(jù)類型長度左邊長時,將丟失一部分數(shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入。 C 語言 知識總結(jié) 15 ? 注意: ? 所有的浮點運算都是以雙精度進行的,即使僅含 float 單精度量運算的表達式,也要先轉(zhuǎn)換成 double 型,再作運算。 數(shù)據(jù)類 型轉(zhuǎn)換中的符號位擴展 符號為擴展主要是針對有符號數(shù)而言的, 這里主要講述整形數(shù)的符號 位 擴展問題。 符號位 擴展的規(guī)則: ? 正 整 數(shù) 發(fā)生符號位擴展時,擴展的位全部填 0 比如 char 型數(shù)據(jù) 127 轉(zhuǎn)換為 short 型 ,上面為轉(zhuǎn)換前,下面為轉(zhuǎn)換后 : 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 ? 負數(shù) 發(fā)生符號位擴展時,擴展的 位全部填 1 還以 char 型數(shù)據(jù) 為例 ,比如 1, 轉(zhuǎn)換為 short 型,上面為轉(zhuǎn)換前,下面為轉(zhuǎn)換后: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 思考一下,下面程序段之行后,輸出的結(jié)果是什么? char a = 0x80。 答: FFFFFF80。 char 型數(shù)據(jù)在運算時一定會先轉(zhuǎn)換為 int 類型,因此 printf 調(diào)用時首先要將 字符型變量 a 轉(zhuǎn)換成int 型,這其中必然涉及符號位擴展。 再看一下下面程序的輸出應(yīng)該是什么? char a = 127。 printf(“%d, %d, %d”, a, b, a+1)。計算 char b = a + 1。 顯示 時 再 將 b 轉(zhuǎn)換為 int 型, 但 轉(zhuǎn)換后不會改變數(shù)值大小和符號位,仍為 128。 因此顯示的結(jié)果為 128。如果前面補 0,按位取反后都變成了 1,計算出的原碼就不再是原值了,擴展位補 1。 優(yōu)先級和結(jié)合性 運算量與運算符結(jié)合時, 看住兩點就可以了: ( 1) 首先看兩側(cè)運算符 優(yōu)先級 的高低, 運算量 先與優(yōu)先級高的運算符結(jié)合 。 例如: a*8b/ 7 C 語言 知識總結(jié) 17 運算量 8 左側(cè)的“ *”優(yōu)先級較高,先計算左側(cè)的 a*8,假設(shè)得到結(jié)果 c,表達式變?yōu)? cb/ 7 新的表達式中,運算量 b 右側(cè)的“ /” ,優(yōu)先級較高,先計算右側(cè)的 b/7,假設(shè)結(jié)果為 d,表達式變?yōu)? cd 最后計算 cd,得到表達式的結(jié)果。 ? 避免掉入 優(yōu)先級和結(jié)合性的陷阱 默認的優(yōu)先級和結(jié)合性比較難記憶,一不留神就會給程序帶來致命傷害。 “ ==” 運算符的陷阱 下面的程序會輸出什么結(jié)果? int i = 0。 i10。 } else { printf(%d, i)。本來 if 判斷中應(yīng)該使用“ ==”,卻被誤寫成“ =” ,這樣,每次執(zhí)行到循環(huán)系中的代碼, i 首先被賦值為 5,之后 i++使得 i 的值為 6,永遠都小于 10,陷入死循環(huán)。 自增、自減運算符 ++i i 自增 1 后再參與其它運算。 i++ i 參與運算后, i 的值再自增 1。 在理解和使用上容易出錯的是 i++和 i
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1