第13章c語言.ppt_第1頁
第13章c語言.ppt_第2頁
第13章c語言.ppt_第3頁
第13章c語言.ppt_第4頁
第13章c語言.ppt_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第13章運(yùn)算符與表達(dá)式 2 22 2020 2 主要內(nèi)容 C語言中 不同的運(yùn)算符可能有不同的優(yōu)先級和不同的結(jié)合方向規(guī)則不同的運(yùn)算符與運(yùn)算對象 常量 變量 函數(shù) 組合起來 構(gòu)成不同類型的表達(dá)式運(yùn)算符的相關(guān)概念 賦值運(yùn)算符 條件運(yùn)算符 逗號運(yùn)算符 自增自減運(yùn)算符及各運(yùn)算符的優(yōu)先級別和結(jié)合方向規(guī)則位運(yùn)算 2 22 2020 3 13 1運(yùn)算符與表達(dá)式 運(yùn)算是對數(shù)據(jù)進(jìn)行加工的過程用來表示不同運(yùn)算的符號稱為運(yùn)算符C語言的運(yùn)算符范圍很廣 除了控制語句和輸入 輸出函數(shù)外 所有的基本操作都作為運(yùn)算符處理參加運(yùn)算的數(shù)據(jù)稱為運(yùn)算對象或操作數(shù) 運(yùn)算對象可以是常量 變量或函數(shù)等按照運(yùn)算符需要的運(yùn)算對象的個(gè)數(shù) 可將運(yùn)算符劃分為單目運(yùn)算符 雙目運(yùn)算符和三目運(yùn)算符對一個(gè)運(yùn)算對象進(jìn)行操作的運(yùn)算符 稱為單目運(yùn)算符 對兩個(gè)運(yùn)算對象進(jìn)行操作的運(yùn)算符 稱為雙目運(yùn)算符 對三個(gè)運(yùn)算對象進(jìn)行操作的運(yùn)算符 稱為三目運(yùn)算符用運(yùn)算符和圓括號將運(yùn)算對象連接起來 符合C語言規(guī)則的式子 稱為表達(dá)式 2 22 2020 4 表達(dá)式必有值 一個(gè)變量或一個(gè)常量是表達(dá)式 表達(dá)式必定有值 并且C語言中的值都是屬于某個(gè)類型 所以表達(dá)式都有值和類型 表達(dá)式的值的類型 也稱為表達(dá)式的類型 單獨(dú)的一個(gè)運(yùn)算對象 稱為原子表達(dá)式 用運(yùn)算符將運(yùn)算對象連接起來 符合C語言規(guī)則的式子 稱為復(fù)合的表達(dá)式 2 22 2020 5 運(yùn)算符的優(yōu)先級與結(jié)合順序 一個(gè)表達(dá)式中可以有多個(gè)運(yùn)算符 先執(zhí)行哪個(gè)運(yùn)算 由運(yùn)算符的優(yōu)先級及結(jié)合方向決定C語言把所有的運(yùn)算符分成15個(gè)優(yōu)先級別 求解表達(dá)式時(shí) 優(yōu)先級高的運(yùn)算符先執(zhí)行一個(gè)表達(dá)式中如果包含多個(gè)相同優(yōu)先級的運(yùn)算符時(shí) 先執(zhí)行哪個(gè)運(yùn)算符則由運(yùn)算符的結(jié)合方向規(guī)定大多數(shù)運(yùn)算符的結(jié)合方向是自左至右的 只有三類運(yùn)算符的結(jié)合方向是自右至左的 單目運(yùn)算符 條件運(yùn)算符和賦值運(yùn)算符注 只有使用同優(yōu)先級的運(yùn)算符時(shí) 才考慮運(yùn)算符的結(jié)合方向使用圓括號可以改變運(yùn)算符的優(yōu)先級和結(jié)合方向 2 22 2020 6 13 2賦值運(yùn)算符與賦值表達(dá)式 變量賦值是給已經(jīng)定義的變量賦一個(gè)特定的值 即 將一個(gè)數(shù)值傳遞給一個(gè)變量 這個(gè)過程稱為賦值運(yùn)算賦值運(yùn)算是通過賦值運(yùn)算符 進(jìn)行的在C語言中 主要是整型變量 實(shí)型變量和字符型變量的賦值 枚舉類型和指針類型的賦值有一定的限制 2 22 2020 7 1 賦值運(yùn)算符 賦值運(yùn)算符 是雙目運(yùn)算符 其作用是將一個(gè)表達(dá)式的值賦給一個(gè)變量被賦值的變量 必須是單個(gè)變量 不能是表達(dá)式 常量或者函數(shù) 并且被賦值的變量 必須在賦值運(yùn)算符的左邊ch a num int 12 2 3 2 8 x錯(cuò)誤x y 6錯(cuò)誤 2 22 2020 8 2 復(fù)合賦值運(yùn)算 在賦值運(yùn)算符 前加上一個(gè)算術(shù)運(yùn)算符或位運(yùn)算符 可以構(gòu)成復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算也為二目運(yùn)算 是C語言特有的一種運(yùn)算C語言規(guī)定了10種復(fù)合賦值運(yùn)算符 即 后五種復(fù)合賦值運(yùn)算是關(guān)于 位運(yùn)算 的 第13 6節(jié)中介紹復(fù)合賦值運(yùn)算的作用是將一個(gè)變量與另外一個(gè)表達(dá)式進(jìn)行算術(shù)運(yùn)算或位運(yùn)算 然后再賦給原來的變量 如 num1 12 num1 num1 12 num2 9 num1 num2 num2 9 num1 2 22 2020 9 3 賦值表達(dá)式 由賦值運(yùn)算符或復(fù)合賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子 稱為賦值表達(dá)式賦值表達(dá)式的一般形式為變量賦值運(yùn)算符表達(dá)式例如 num 3 21是一個(gè)表達(dá)式 2 22 2020 10 賦值表達(dá)式的值 賦值表達(dá)式應(yīng)該具有確定的類型和值賦值表達(dá)式的求解過程為 將賦值運(yùn)算符右側(cè)的 表達(dá)式 的值賦值給左側(cè)的變量被賦值的變量的值 即為整個(gè)賦值表達(dá)式的值 例如 賦值表達(dá)式 num 3 21 中 變量num的值為63 整個(gè)表達(dá)式的值也為63 2 22 2020 11 變量可以多次賦值 當(dāng)多次給同一個(gè)變量賦值后 該變量保留最后所賦的值 例如 intnum 3 printf d n num num 4 printf d n num 則分別輸出3和4 2 22 2020 12 賦值表達(dá)式的類型 被賦值變量的類型 就是賦值表達(dá)式的類型當(dāng)賦值運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致時(shí) C編譯系統(tǒng)將賦值運(yùn)算符右邊的數(shù)據(jù)類型轉(zhuǎn)換成與左邊變量相同的類型轉(zhuǎn)換分為兩類一類是右側(cè)表達(dá)式的存儲單元較小 被賦值變量的存儲單元較大另一類是右側(cè)表達(dá)式的存儲單元較大 被賦值變量的存儲單元較小 2 22 2020 13 表13 2被賦值變量的存儲單元較大 2 22 2020 14 表13 3被賦值變量的存儲單元較小 2 22 2020 15 4 賦值運(yùn)算符的優(yōu)先級和結(jié)合順序 賦值運(yùn)算符的優(yōu)先級比較低 賦值運(yùn)算符與對應(yīng)的復(fù)合賦值運(yùn)算符的優(yōu)先級相同賦值運(yùn)算符是按照自右至左的結(jié)合順序進(jìn)行求解的 如 num1 num2 3 是一個(gè)賦值表達(dá)式 相當(dāng)于 num2 3 和 num1 num2 變量num1和num2都具有值3 整個(gè)賦值表達(dá)式的值也為3 num1 num2 3 和 num1 num2 3 等價(jià)賦值表達(dá)式中 也可以包含復(fù)合的賦值運(yùn)算符num1 3 num2 2 相當(dāng)于 num2 num2 2 和 num1 num1 3 num2 2 22 2020 16 賦值表達(dá)式的應(yīng)用 賦值表達(dá)式加分號 即成為賦值語句將賦值表達(dá)式作為表達(dá)式的一種 使賦值操作不僅可以出現(xiàn)在賦值語句中 而且能夠以表達(dá)式的形式出現(xiàn)在其他語句或函數(shù)中inta 6 printf d a 3 則輸出a的值為9 既完成了賦值的作用 又實(shí)現(xiàn)了輸出的功能 2 22 2020 17 13 3逗號運(yùn)算符與逗號表達(dá)式 C語言允許用一個(gè)表達(dá)式進(jìn)行計(jì)算 但有時(shí)只寫一個(gè)表達(dá)式不能完成計(jì)算任務(wù)逗號運(yùn)算符是C語言提供的一種比較特殊的運(yùn)算符 它的作用是將兩個(gè)表達(dá)式連接起來 合為一個(gè)表達(dá)式逗號表達(dá)式的一般形式為表達(dá)式1 表達(dá)式2 2 22 2020 18 1 逗號表達(dá)式的求解順序 先求解表達(dá)式1的值 再求解表達(dá)式2的值 第二個(gè)表達(dá)式的值和類型即為整個(gè)逗號表達(dá)式的值和類型逗號運(yùn)算符也稱為 順序求值運(yùn)算符 num 5 num 6該逗號表達(dá)式先求解表達(dá)式1的值 得到5 此時(shí)變量num的值也為5 然后求解第二個(gè)表達(dá)式的值為30 即整個(gè)逗號表達(dá)式的值也為30 2 22 2020 19 2 逗號運(yùn)算符的優(yōu)先級 在C語言的運(yùn)算符中 逗號運(yùn)算符的優(yōu)先級最低num 6 num 4求解該逗號表達(dá)式 則先求解第一個(gè)表達(dá)式的值 該表達(dá)式為賦值表達(dá)式 值為6 并且變量num得到值6再求第二個(gè)表達(dá)式 得到值24 即整個(gè)逗號表達(dá)式的值也為24 2 22 2020 20 3 逗號運(yùn)算符的擴(kuò)展形式 一個(gè)逗號表達(dá)式可以與另一個(gè)表達(dá)式組成新的逗號表達(dá)式逗號表達(dá)式的一般形式可以擴(kuò)展為表達(dá)式1 表達(dá)式2 表達(dá)式n逗號表達(dá)式的本質(zhì)是把若干個(gè)表達(dá)式連接起來使用逗號表達(dá)式不但可以得到整個(gè)逗號表達(dá)式的值 還可以得到各個(gè)表達(dá)式的值逗號表達(dá)式經(jīng)常用于for循環(huán)語句中 也可以作為實(shí)際參數(shù)printf num1 d num2 d num1 2 num 3 num2 2 22 2020 21 注意 函數(shù)的實(shí)際參數(shù)是用逗號隔開的 因此 并非在任何地方出現(xiàn)的逗號都是逗號運(yùn)算符printf num1 d num2 d num1 num2 這里的printf函數(shù)包括了三個(gè)參數(shù) 參數(shù)間的逗號只用來分隔參數(shù) 并不是逗號運(yùn)算符第一個(gè)參數(shù)中 也包含了一個(gè)逗號 該逗號只是一個(gè)在屏幕上顯示的普通字符 也不是逗號運(yùn)算符 2 22 2020 22 printf函數(shù)中的逗號 printf函數(shù)中的逗號不是逗號運(yùn)算符 所以函數(shù)中的各個(gè)表達(dá)式并不構(gòu)成逗號表達(dá)式 求解時(shí)也不能按逗號表達(dá)式的求解規(guī)則運(yùn)算非逗號運(yùn)算符的逗號隔開的各個(gè)表達(dá)式 C語言并沒有規(guī)定求解順序已知 inti 10 printf d d i i i 1 如果按先左后右的求解表達(dá)式 輸出結(jié)果為 10 11 如果按先右后左的順序求解表達(dá)式 輸出結(jié)果為 11 11 GCC和TC都是按從右至左的順序求解這類表達(dá)式的 2 22 2020 23 13 4條件運(yùn)算符與條件表達(dá)式 條件運(yùn)算符是C語言中唯一的三目運(yùn)算符條件表達(dá)式的一般形式為表達(dá)式1 表達(dá)式2 表達(dá)式3條件運(yùn)算符包括三個(gè)表達(dá)式 符號 和 兩個(gè)符號將三個(gè)表達(dá)式隔開 缺一不可 2 22 2020 24 1 條件運(yùn)算符的求解順序 表達(dá)式1 表達(dá)式2 表達(dá)式3先求解表達(dá)式1若表達(dá)式1的值為真 非0 不求解表達(dá)式3 只求解表達(dá)式2的值 并將表達(dá)式2的值作為整個(gè)條件表達(dá)式的值 若表達(dá)式1的值為假 0 則不求解表達(dá)式2的值 只求解表達(dá)式3的值 并將表達(dá)式3的值作為整個(gè)條件表達(dá)式的值 2 22 2020 25 例13 1 條件運(yùn)算符的求解順序 includeintmain intnum1 num2 while 1 printf Inputtwonumbers n scanf d d 2 22 2020 26 2 條件運(yùn)算符的優(yōu)先級 條件運(yùn)算符的優(yōu)先級高于賦值表達(dá)式 例如 max num1 num2 num1 num2 等價(jià)于max num1 num2 num1 num2先比較num1和num2兩個(gè)變量的值的大小 然后把較大的值賦給變量max條件運(yùn)算符的優(yōu)先級低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符num1 num2 num1 5 num2 num2等價(jià)于 num1 num2 num1 5 num2 num2 2 22 2020 27 3 條件運(yùn)算符的結(jié)合方向 條件運(yùn)算符的結(jié)合方向是 自右至左 例如 x 0 1 x 0 1 0等價(jià)于 x 0 1 x 0 1 0 2 22 2020 28 4 條件表達(dá)式的其他形式 條件表達(dá)式中的表達(dá)式1的類型 可以與表達(dá)式2和表達(dá)式3的類型不同intnum num 0 a b 如果num的值是正數(shù) 則該條件表達(dá)式的值為 a 否則表達(dá)式的值為 b 條件表達(dá)式中的表達(dá)式2和表達(dá)式3 不僅可為數(shù)值表達(dá)式 也可以是其他表達(dá)式或者函數(shù)表達(dá)式 num1 0 printf d 0 num1 printf d0 num2 num2 2 22 2020 29 例13 2 條件運(yùn)算符的使用 intmain intnum1 num2 printf Inputtwonumbers n scanf d d num1 num2 num1 num2 printf num1 d n num1 printf num2 d n num2 return0 2 22 2020 30 13 5自增自減運(yùn)算符 自增運(yùn)算符 作用是使得變量的值增加1自減運(yùn)算符 作用是使得變量的值減少1自增 自減運(yùn)算符各有兩種不同的用法 2 22 2020 31 1 前置運(yùn)算 運(yùn)算符放在變量前 它使得變量的值增加 或減少 1 然后變量以變化后的值參與其他運(yùn)算前置的自增和自減運(yùn)算符的一般表示形式分別為 變量 變量 i j 2 22 2020 32 例13 3 前置自增自減運(yùn)算符 includeintmain inti 5 j 5 printf First i d n i i printf Second i d n i printf Third i d n i printf Fouth i d n i printf First j d n j j printf Second j d n j printf Third j d n j printf Fouth j d n j return0 2 22 2020 33 2 后置運(yùn)算 運(yùn)算符放在變量的后面 使得變量先參加其他運(yùn)算 然后使得變量的值增加 或減少 1后置的自增和自減運(yùn)算符的一般表示形式分別為變量 變量 i j 2 22 2020 34 例13 4 后置自增自減運(yùn)算符 includeintmain inti 5 j 5 printf First i d n i i printf Second i d n i printf Third i d n i printf Fouth i d n i printf First j d n j j printf Second j d n j printf Third j d n j printf Fouth j d n j return0 2 22 2020 35 3 自增自減運(yùn)算符的優(yōu)先級與結(jié)合方向 自增運(yùn)算符和自減運(yùn)算符 都只能用于變量 而不能用于常量或者表達(dá)式 16 a b i 同一個(gè)表達(dá)式中 允許一個(gè)變量連續(xù)進(jìn)行自增和自減運(yùn)算 但在不同的系統(tǒng)下求解的結(jié)果不同設(shè)inti 0 i i TurboC按照自左至右的順序求解括號里面的運(yùn)算 首先計(jì)算第一個(gè)括號的值為0 但i的值變?yōu)? 然后計(jì)算第二個(gè)括號的值為1 但i的值變?yōu)? 故整個(gè)表達(dá)式的值為1而GCC等系統(tǒng)把i的初值0作為表達(dá)式中所有i的值 因此兩個(gè)i相加 得到表達(dá)式的值為0 然后再對表達(dá)式中兩個(gè)括號中的自加運(yùn)算分別處理 i的值變?yōu)? 2 22 2020 36 例 inta 12 在TC環(huán)境下 a a a a 問a 此表達(dá)式的計(jì)算步驟如下 先進(jìn)行 a a a 的運(yùn)算 它相當(dāng)于a a a a 12 12 12 12 144 132再進(jìn)行 a 132 的運(yùn)算 它相當(dāng)于a a 132 132 132 132 132 264 2 22 2020 37 例子 若a 1 b 2 c 3 d 4 m 1 n 3 則邏輯表達(dá)式 m a b n c d 執(zhí)行后 m 0 n 3因?yàn)?賦值表達(dá)式 m a b 的值為0 無論表達(dá)式 n c d 的值為真還是為假 整個(gè)邏輯表達(dá)式 m a b n c d 的值均為0 所以表達(dá)式 n c d 不被求解 變量n保持了原來的值3 x 0 0 y x 1 0當(dāng)x為0時(shí) 這個(gè)表達(dá)式仍然可以計(jì)算 不會出現(xiàn) 除0錯(cuò)誤 2 22 2020 38 例子若inta 0 b 1 則 a b 執(zhí)行后 a b的值為多少 a 1 b 2a b 執(zhí)行后 a b的值為多少 a 1 b 0a b 執(zhí)行后 a b的值為多少 a 2 b 2a b 執(zhí)行后 a b的值為多少 a 0 b 0對于a b 因?yàn)槎x性的原因 有的系統(tǒng)不支持 2 22 2020 39 例子若inta 0 b 1 c 2 則 邏輯表達(dá)式a b c 執(zhí)行后 a 1 b 1 c 2 表達(dá)式的值為0邏輯表達(dá)式 a b c 執(zhí)行后 a 1 b 2 c 3 表達(dá)式的值為1邏輯表達(dá)式 a b c 執(zhí)行后 a 1 b 0 c 2 表達(dá)式的值為0邏輯表達(dá)式a b c 執(zhí)行后 a 1 b 2 c 2 表達(dá)式的值為1 a 為后置 2 22 2020 40 例子若inta 0 b 1 c 2 則 邏輯表達(dá)式 a b c 執(zhí)行后 a 1 b 1 c 2 表達(dá)式的值為1邏輯表達(dá)式a b c 執(zhí)行后 a 1 b 0 c 3 表達(dá)式的值為1邏輯表達(dá)式a b c 2 執(zhí)行后 a 1 b 2 c 0 表達(dá)式的值為0邏輯表達(dá)式a b c 2 執(zhí)行后 a 1 b 1 c 0 表達(dá)式的值為0邏輯表達(dá)式 a b c 2 執(zhí)行后 a 1 b 2 c 2 表達(dá)式的值為1 2 22 2020 41 13 6位運(yùn)算 賦值運(yùn)算 條件運(yùn)算 逗號運(yùn)算 自增自減運(yùn)算 關(guān)系運(yùn)算及邏輯運(yùn)算等 都是以字節(jié) Byte 為基本單位進(jìn)行的在很多系統(tǒng)中 有時(shí)需要在位 bit 一級進(jìn)行運(yùn)算或數(shù)據(jù)處理C語言提供了位運(yùn)算的功能 使得C語言也能像匯編一樣用來編寫系統(tǒng)程序 從而使C語言既具有高級語言的特征 又具有低級語言的特征 2 22 2020 42 1 位運(yùn)算符 C語言提供了6種位運(yùn)算符 2 22 2020 43 2 位運(yùn)算的功能 進(jìn)行位運(yùn)算的數(shù)據(jù)只能是整型或字符型的數(shù)據(jù)實(shí)型數(shù)據(jù)不能進(jìn)行位運(yùn)算 2 22 2020 44 1 按位與 運(yùn)算符 按位與 運(yùn)算是雙目運(yùn)算 結(jié)合方向?yàn)樽宰笾劣夜δ?兩個(gè)運(yùn)算數(shù)對應(yīng)的二進(jìn)制位相 與 按位與 運(yùn)算時(shí) 當(dāng)且僅當(dāng)對應(yīng)的兩個(gè)二進(jìn)制位均為1時(shí) 結(jié)果的相應(yīng)位才為1如 計(jì)算23 12時(shí) 可以寫為算式 00010111 0000110023 12的結(jié)果為400010111為23的二進(jìn)制補(bǔ)碼00001100為12的二進(jìn)制補(bǔ)碼00000100 4的二進(jìn)制補(bǔ)碼 2 22 2020 45 按位與運(yùn)算的主要作用 1 按位與 可以將一個(gè)單元中的數(shù)清零 即 將該數(shù)的二進(jìn)制位全部變?yōu)?選擇一個(gè)符合以下條件的數(shù) 待清零數(shù)中為1的位 選擇的數(shù)的相應(yīng)位為0 滿足該條件的數(shù)可能不唯一 將待清零數(shù)與選擇數(shù)進(jìn)行 運(yùn)算 得到的數(shù)即為清零后的數(shù) 如 原有數(shù) 01100011 則可以選取 10001000 然后進(jìn)行 運(yùn)算2 按位與 可以截取一個(gè)數(shù)中的某些指定位 2 22 2020 46 intmain intnum scanf d num printf d num 255 return0 例13 5 將一個(gè)整數(shù)的高8位清零 其中 十進(jìn)制整數(shù)1754的二進(jìn)制形式為 0000011011011010 2 為了截取得到其低8位 只需要將其高8位清零 高8位清零后變?yōu)?0000000011011010 2 即十進(jìn)制的218 通過 按位與 運(yùn)算 也可以截取某個(gè)整數(shù) 得到其高8位 2 22 2020 47 按位與運(yùn)算的主要作用 3 按位與 可以將一個(gè)數(shù)中的特定位保留下來 并使得其他位變?yōu)?選取一個(gè)數(shù) 該數(shù)中相應(yīng)的特定位為1 其他位為0將選擇的數(shù)與原來的數(shù)進(jìn)行 運(yùn)算 運(yùn)算的結(jié)果 即保留了原數(shù)的特定位如 欲保留 11001001 的偶數(shù)位 并使其奇數(shù)位變?yōu)? 可以選取 01010101 然后對兩個(gè)數(shù)進(jìn)行 運(yùn)算 結(jié)果為 01000001 2 22 2020 48 2 按位或 運(yùn)算符 按位或 運(yùn)算 是雙目運(yùn)算 結(jié)合方向?yàn)樽宰笾劣夜δ?兩個(gè)運(yùn)算數(shù)對應(yīng)的二進(jìn)制位相 或 按位或運(yùn)算時(shí) 當(dāng)且僅當(dāng)對應(yīng)的兩個(gè)二進(jìn)制位均為0時(shí) 結(jié)果的相應(yīng)位才為0如 計(jì)算23 12時(shí) 可以寫為算式 00010111 0000110000010111為23的二進(jìn)制補(bǔ)碼 00001100為12的二進(jìn)制補(bǔ)碼 00011111為31的二進(jìn)制補(bǔ)碼即 23 12的結(jié)果為31 按位或 運(yùn)算常用來對一個(gè)數(shù)據(jù)的某些特定位置為1如 a是一個(gè)整數(shù) 計(jì)算a a 0377則a的低8位全部置為1 高8位保留原數(shù)的相應(yīng)位 2 22 2020 49 3 按位異或 運(yùn)算符 按位異或 運(yùn)算 是雙目運(yùn)算 結(jié)合方向?yàn)樽宰笾劣夜δ?兩個(gè)運(yùn)算數(shù)對應(yīng)的二進(jìn)制位相異或 按位異或運(yùn)算時(shí) 當(dāng)且僅當(dāng)對應(yīng)的二進(jìn)制位相異時(shí) 結(jié)果為1如 計(jì)算23 12時(shí) 可以寫為算式 00010111 23的二進(jìn)制補(bǔ)碼 00001100 12的二進(jìn)制補(bǔ)碼 00011011 27的二進(jìn)制補(bǔ)碼 即23 12的結(jié)果為27 2 22 2020 50 按位異或運(yùn)算的主要作用 1 使特定位翻轉(zhuǎn) 選擇一個(gè)數(shù) 其特定的位為1 其他位為0 然后將待翻轉(zhuǎn)位的數(shù)與選擇數(shù)進(jìn)行 運(yùn)算設(shè)有 01101100 欲使其高5位翻轉(zhuǎn) 則可以將該數(shù)與 11111000 異或 得到 10010100 2 與0相 保留原值00010111 23的二進(jìn)制補(bǔ)碼 00000000 0的二進(jìn)制補(bǔ)碼 00010111 23的二進(jìn)制補(bǔ)碼 2 22 2020 51 按位異或運(yùn)算的主要作用 3 不用臨時(shí)變量 交換兩個(gè)值設(shè)有兩個(gè)變量 其中 num1 5 num2 6 欲交換num1和num2的值 并且不引入新的變量 則可以用 運(yùn)算來實(shí)現(xiàn) num1 num1 num2 num2 num2 num1 num1 num1 num2 由前兩個(gè)賦值語句 num2 num2 num1 num2 而num2 num1 num2 等價(jià)于num1 num2 num2 由于任何一個(gè)數(shù)與本身相異或 結(jié)果都為0 因此 有num2 num1 0 即num2得到了num1的值 求解第三個(gè)賦值語句時(shí) 由于 num1 num1 num2 和 num2 num1 所以有num1 num1 num2 num1 即num1 num2 2 22 2020 52 4 按位取反 運(yùn)算符 按位異或 運(yùn)算 是單目運(yùn)算 結(jié)合方向?yàn)樽杂抑磷蠊δ?對運(yùn)算數(shù)的二進(jìn)制位按位求反 即 將0變?yōu)? 將1變?yōu)? 00010101 的結(jié)果為11101010 運(yùn)算符的優(yōu)先級高于算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 邏輯運(yùn)算符和其他位運(yùn)算符計(jì)算 num1 num2 先計(jì)算 num1 然后進(jìn)行按位與 運(yùn)算 2 22 2020 53 5 左移運(yùn)算符 左移 運(yùn)算 是雙目運(yùn)算 結(jié)合方向?yàn)樽宰笾劣夜δ?把 左邊的運(yùn)算數(shù)的各二進(jìn)制位依次左移 移動的位數(shù)由 右邊的運(yùn)算數(shù)指定移位過程中 高位溢出丟棄 低位補(bǔ)0如 計(jì)算17 2 即將 00010001 左移兩位 得到01000100 即68左移運(yùn)算比乘法運(yùn)算速度快得多 2 22 2020 54 6 右移運(yùn)算符 右移 運(yùn)算 是雙目運(yùn)算 結(jié)合方向?yàn)樽宰笾劣夜δ?把 右邊的運(yùn)算數(shù)指定一個(gè)數(shù)右移1位相當(dāng)于除以2 右移n位相當(dāng)于除以2n移位過程中 低位移出被丟棄對于無符號數(shù) 高位補(bǔ)0 對于有符號數(shù) 并且原來的符號位為1 即原數(shù)為負(fù)數(shù)時(shí) 則左邊移入0還是1 取決于所用的計(jì)算機(jī)系統(tǒng)移入0的稱為 邏輯右移 即簡單右移 移入1的稱為 算術(shù)右移 TurboC采用的是算術(shù)右移 即 對于有符號數(shù)右移時(shí) 如果符號位原來為1 則左邊移入高位為1 2 22 2020 55 3 位運(yùn)算賦值運(yùn)算符 位運(yùn)算符與賦值運(yùn)算符可以組合成為復(fù)合賦值運(yùn)算符C語言各定義了5種

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論