




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算C語言程序設(shè)計(jì)提高篇第第4 4章章 位運(yùn)算位運(yùn)算 提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算位運(yùn)算操作位運(yùn)算操作位段的概念位段的概念提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算字節(jié)和位的有關(guān)概念;字節(jié)和位的有關(guān)概念; 正確使用常見的位運(yùn)算符和位運(yùn)算操作;正確使用常見的位運(yùn)算符和位運(yùn)算操作;牢記位段的要領(lǐng)及位段的使用方法。牢記位段的要領(lǐng)及位段的使用方法。 提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算C語言既是一種高級(jí)語言,廣泛應(yīng)用于應(yīng)用軟語言既是一種高級(jí)語言,廣泛應(yīng)用于應(yīng)用軟件的開發(fā)和程序設(shè)計(jì),同時(shí)又是一種低級(jí)語言,件的開發(fā)和程序設(shè)計(jì),同時(shí)又是一種低級(jí)語言,
2、可以用于系統(tǒng)軟件的開發(fā)和程序設(shè)計(jì),如自動(dòng)可以用于系統(tǒng)軟件的開發(fā)和程序設(shè)計(jì),如自動(dòng)控制系統(tǒng)中的過程控制、參數(shù)檢測、數(shù)據(jù)通訊控制系統(tǒng)中的過程控制、參數(shù)檢測、數(shù)據(jù)通訊等控制程序,都可以綜合利用等控制程序,都可以綜合利用C語言中的指針語言中的指針操作、位運(yùn)算和位段技術(shù)來實(shí)現(xiàn)。操作、位運(yùn)算和位段技術(shù)來實(shí)現(xiàn)。本章介紹位運(yùn)算的基本形式和常用運(yùn)算符本章介紹位運(yùn)算的基本形式和常用運(yùn)算符,并并簡要介紹位段的概念。位運(yùn)算的深入學(xué)習(xí),應(yīng)簡要介紹位段的概念。位運(yùn)算的深入學(xué)習(xí),應(yīng)該在該在計(jì)算機(jī)原理計(jì)算機(jī)原理和和匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)課程中進(jìn)行。課程中進(jìn)行。提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算位運(yùn)算概述位運(yùn)
3、算概述所謂所謂“位運(yùn)算位運(yùn)算”,是指按二進(jìn)制位進(jìn)行運(yùn)算。,是指按二進(jìn)制位進(jìn)行運(yùn)算。n位運(yùn)算的特點(diǎn):位運(yùn)算的特點(diǎn):運(yùn)算按二進(jìn)制逐位進(jìn)行運(yùn)算按二進(jìn)制逐位進(jìn)行沒有借沒有借位和進(jìn)位。位和進(jìn)位。位運(yùn)算量位運(yùn)算量:整型(:整型(int,short,unsiged,long)/字符型(以補(bǔ)碼字符型(以補(bǔ)碼/ASCII碼形式存儲(chǔ)),不可為碼形式存儲(chǔ)),不可為實(shí)型。實(shí)型。提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算位運(yùn)算符位運(yùn)算符 (Bitwise Operators)運(yùn)算符運(yùn)算符名稱名稱舉例舉例優(yōu)先級(jí)優(yōu)先級(jí)按位取反按位取反flag(高高)(算術(shù)運(yùn)算符算術(shù)運(yùn)算符)左移左移a 右移右移b 3(關(guān)系運(yùn)算符關(guān)系運(yùn)算符)
4、&按位與按位與flag & 0 x37按位異或按位異或flag 0 xC4|按位或按位或flag | 0 x5A(低低)(賦值運(yùn)算符賦值運(yùn)算符)提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算 位運(yùn)算符還可與賦值運(yùn)算符相結(jié)合,進(jìn)行位運(yùn)算位運(yùn)算符還可與賦值運(yùn)算符相結(jié)合,進(jìn)行位運(yùn)算賦值操作。如:賦值操作。如: a&=b 等價(jià)于等價(jià)于 a=a&b a=b 等價(jià)于等價(jià)于 a=ab 位運(yùn)算時(shí)的數(shù)據(jù)類型為位運(yùn)算時(shí)的數(shù)據(jù)類型為char/int,分析時(shí)要化,分析時(shí)要化為二進(jìn)制形式,但在程序中書寫及輸出結(jié)果時(shí)仍為二進(jìn)制形式,但在程序中書寫及輸出結(jié)果時(shí)仍為為char/int。 負(fù)數(shù)以補(bǔ)碼
5、形式參與運(yùn)算負(fù)數(shù)以補(bǔ)碼形式參與運(yùn)算 注意與邏輯運(yùn)算區(qū)別注意與邏輯運(yùn)算區(qū)別提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算按位與 (Bitwise AND) 運(yùn)算規(guī)則運(yùn)算規(guī)則 0 & 0 = 0; 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1; 用法用法 按位清零按位清零 保留某些指定位保留某些指定位位運(yùn)算符的使用提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例1 1#include void main( ) int a,b; printf(Enter a and b:); scanf(%d,%d,&a,&b); printf(a&
6、;b=%dn,a&b); 計(jì)算 010 000 (a) & 011 111 (b) 010 000 001 010 (a) & 010 000 (b) 000 000 Enter a and b: 16,31a&b=16Enter a and b: 10,16a&b=0提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算按位或 (Bitwise Inclusive OR) 運(yùn)算規(guī)則運(yùn)算規(guī)則 0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1; 用法用法 按位定值為按位定值為1提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例2#inc
7、lude void main( ) unsigned char a,b; printf(Enter a and b:); scanf(%o,%o,&a,&b); printf(a|b=%on,a|b); Enter a and b: 20,30a | b=30Enter a and b: 12,20a | b=32計(jì)算計(jì)算 010 000 (a) | 011 000 (b) 011 000 001 010 (a) | 010 000 (b) 011 010 提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算按位異或按位異或 (Bitwise Exclusive OR, XOR) 運(yùn)算規(guī)
8、則運(yùn)算規(guī)則 0 0 = 0; 0 1 = 1; 1 0 = 1; 1 1 = 0; 說明說明 相相“異異”則為則為1,相,相“同同”則為則為0提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例3以下程序的功能是將以下程序的功能是將a數(shù)據(jù)的低數(shù)據(jù)的低4位取反。位取反。#include void main() unsigned char a=0 x39, b= = ; a=ab; printf(%xn, a);答案:答案:0 x0f 計(jì)算計(jì)算 00111001 (a) 00001111 (b) 00110110 l與與0相異或,保持原值不變相異或,保持原值不變l與自身相異或,則全部位清零與自身相異或,
9、則全部位清零l交換兩個(gè)整數(shù)值交換兩個(gè)整數(shù)值na=ab; b=ba; a=ab;提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算交換兩個(gè)整數(shù)值不用臨時(shí)變量交換兩個(gè)整數(shù)值不用臨時(shí)變量 #include void main() int a=3, b=4 ; a=ab; b=ba; a=ab; printf(“a=%d b=%dn, a,b); 結(jié)果:結(jié)果:a=4 b=3提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算按位取反按位取反 (Ones Complement) 運(yùn)算規(guī)則運(yùn)算規(guī)則 0 = 1; 1 = 0; 用法用法 所有位翻轉(zhuǎn)所有位翻轉(zhuǎn) 獲得適用于不同系統(tǒng)的位運(yùn)算模板獲得適用于不同系統(tǒng)的位運(yùn)算模板提高篇
10、C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例4#include void main()int a=32767;int b=a;printf(a=%d,b=%dn,a,b);結(jié)果:結(jié)果:a=32767a=32767,b=-32768b=-32768 計(jì)算計(jì)算a:原碼原碼: 11111b:補(bǔ)碼補(bǔ)碼:10000提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算左移 (Left Shift) 運(yùn)算規(guī)則運(yùn)算規(guī)則 i n 把把i各位全部向左移動(dòng)各位全部向左移動(dòng)n位位 最左端的最左端的n位被移出丟棄位被移出丟棄 最右端的最右端的n位用位用0補(bǔ)齊補(bǔ)齊 用法用法 若沒有溢出,則左移若沒有溢出,則左移n位相當(dāng)于乘上位相當(dāng)于乘
11、上2n 運(yùn)算速度比真正的乘法和冪運(yùn)算快得多運(yùn)算速度比真正的乘法和冪運(yùn)算快得多提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例5 5以下程序的運(yùn)行結(jié)果是以下程序的運(yùn)行結(jié)果是 60 60 。#include void main()unsigned int a=15,b;b=a2;printf(%d,%dn,a,b);提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例6 6以下程序的運(yùn)行結(jié)果是以下程序的運(yùn)行結(jié)果是 。#include void main()int a=12,b;b=0 x1f5 & a3;printf(%d,%dn,a,b);結(jié)果:12,96計(jì)算已知:0 x1f5為1 1111 0
12、101且:a為1100 a n 把把i各位全部向右移動(dòng)各位全部向右移動(dòng)n位位 最右端的最右端的n位被移出丟棄位被移出丟棄 最左端的最左端的n位用位用0補(bǔ)齊補(bǔ)齊(邏輯右移邏輯右移) 或最左端的或最左端的n位用位用符號(hào)位符號(hào)位補(bǔ)齊補(bǔ)齊(算術(shù)右移算術(shù)右移) 用法用法 右移右移n位相當(dāng)于除以位相當(dāng)于除以2n,并舍去小數(shù)部分,并舍去小數(shù)部分 運(yùn)算速度比真正的除法和冪運(yùn)算快得多運(yùn)算速度比真正的除法和冪運(yùn)算快得多提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例7以下程序的運(yùn)行結(jié)果是以下程序的運(yùn)行結(jié)果是 4,5 。#include void main()int a=16,b=20;printf(%d,%d,a2
13、,b2);提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算應(yīng)用示例 從整數(shù)a最右端第m個(gè)位置開始取該位開始右面n位 。 算法如下: b=a(m-n+1) c=(0n) d=b&c 注:位自右向左從0開始編號(hào)提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算應(yīng)用示例 將一個(gè)整數(shù)a循環(huán)右移n位。算法如下: b=anc=c|b 提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算 例例8:將將16進(jìn)制短整數(shù)按二進(jìn)制打印輸出進(jìn)制短整數(shù)按二進(jìn)制打印輸出輸入:輸入:F1E2輸出:輸出:11110輸入:輸入:13A5輸出:輸出:00101提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算算法思想:算法思想: 從高位到低位逐位測試每
14、一位是從高位到低位逐位測試每一位是0或是或是1??身槨?身槾卧O(shè)置屏蔽字分別為次設(shè)置屏蔽字分別為1000 0000 0000 0000、0100 0000 0000 0000、0000 0000 0000 0001,與,與該數(shù)進(jìn)行該數(shù)進(jìn)行&運(yùn)算,從而保留所需的一個(gè)位的狀態(tài)運(yùn)算,從而保留所需的一個(gè)位的狀態(tài)(其余各位為其余各位為0)。若結(jié)果非零則輸出。若結(jié)果非零則輸出1,否則輸出,否則輸出0。提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算#include void main()int i;short a;scanf(%X, &a);for (i=15;i=0;i-)printf(%1d,
15、 a&1i?1:0);提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算 C語言允許在一個(gè)結(jié)構(gòu)體中以位為單位來語言允許在一個(gè)結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長度。這種以位為指定其成員所占內(nèi)存長度。這種以位為單位的成員稱為單位的成員稱為“位段位段”。提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算位段的概念位段的概念1.1.位段的含義位段的含義 位段是以位為單位定義長度的結(jié)構(gòu)體類型中的成員位段是以位為單位定義長度的結(jié)構(gòu)體類型中的成員. .2 2、位段的構(gòu)成、位段的構(gòu)成例如例如: :struct pack unsigned a:2; unsigned b:6; unsigned c:8; int
16、x; data;這個(gè)結(jié)構(gòu)體類型的變量在內(nèi)存中的情況為這個(gè)結(jié)構(gòu)體類型的變量在內(nèi)存中的情況為: : a b c x2 26 68 81616提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算也可以使各個(gè)字段不恰好占滿一個(gè)字節(jié)也可以使各個(gè)字段不恰好占滿一個(gè)字節(jié)struct pack unsigned a:2; unsigned b:6; unsigned c:4; int x; data;則內(nèi)存中的分配形式為則內(nèi)存中的分配形式為: :此處:此處:a,b,ca,b,c共占共占2 2個(gè)字節(jié)中的個(gè)字節(jié)中的1212位,空閑位,空閑4 4位位, , int int型的型的x x從一個(gè)新的字節(jié)開始從一個(gè)新的字節(jié)開始.
17、. a b c x2 26 64 41616 空閑4 4提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算對位段中數(shù)據(jù)的引用方法對位段中數(shù)據(jù)的引用方法1 1、方法:通過結(jié)構(gòu)體成員來應(yīng)用:、方法:通過結(jié)構(gòu)體成員來應(yīng)用:如:如:data.a=2;data.b=6;2 2、要點(diǎn):、要點(diǎn): 注意每個(gè)字段的最大取值范圍注意每個(gè)字段的最大取值范圍. . 如如:data.a:data.a的取值只能是的取值只能是:03,:03, 因?yàn)閮晌欢M(jìn)制最大表示的數(shù)為因?yàn)閮晌欢M(jìn)制最大表示的數(shù)為3.3.提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算 1.1.若某個(gè)位段要從新的存儲(chǔ)單元開始若某個(gè)位段要從新的存儲(chǔ)單元開始, ,可以這樣
18、定義可以這樣定義: :struct packunsigned a:2;unsigned :0;unsigned b:4;unsigned c:4;int x;data;注意:長度為注意:長度為0 0的位段的作用是使下一個(gè)位段的的位段的作用是使下一個(gè)位段的內(nèi)容從新的存儲(chǔ)單元開始存放。內(nèi)容從新的存儲(chǔ)單元開始存放。位段的使用要點(diǎn)位段的使用要點(diǎn)提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算位段的使用要點(diǎn)位段的使用要點(diǎn) 2.一個(gè)位段存儲(chǔ)在同一個(gè)機(jī)器字中一個(gè)位段存儲(chǔ)在同一個(gè)機(jī)器字中,不能跨不能跨字存儲(chǔ)字存儲(chǔ).如下面的定義是錯(cuò)誤的如下面的定義是錯(cuò)誤的(假設(shè)機(jī)器假設(shè)機(jī)器的字長為的字長為16位位)struct pa
19、ck unsigned a:2; unsigned b:5; unsigned c:10; unsigned d:4; int x; data;提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算3.可以定義無名字段可以定義無名字段struct pack unsigned a:2; unsigned :5;/*空閑不用空閑不用*/ unsigned b:2; unsigned c:4; int x; data;位段的使用要點(diǎn)位段的使用要點(diǎn)提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算 4.位段可以用十進(jìn)制的整型形式輸出位段可以用十進(jìn)制的整型形式輸出,也可以用其也可以用其他的整型格式輸出他的整型格式輸出(如八
20、進(jìn)制如八進(jìn)制,十六進(jìn)制和無符號(hào)十六進(jìn)制和無符號(hào)),位段以整型的形式參加算術(shù)運(yùn)算位段以整型的形式參加算術(shù)運(yùn)算. 分析下面的程序:分析下面的程序:例例9:void main() struct pack unsigned a:2; unsigned b:3; unsigned c:1; unsigned d:4; unsigned e:3; unionstruct pack qp; unsigned i;abc; abc.i=255; printf(“%dn”,abc.qp.d);位段的使用要點(diǎn)位段的使用要點(diǎn)提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算例例10:分析下列程序的輸出結(jié)果:分析下列程序的輸
21、出結(jié)果#define N 2#define CUBE(X) (X*X*X)#include void main()int i=N+2;i=CUBE(i);printf(%dn,i);運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:64提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算 例例11:下列程序的輸出結(jié)果是什么:下列程序的輸出結(jié)果是什么? #include void main() struct equip unsigned a:2; unsigned b:3; unsigned c:1; unsigned d:4; unsigned e:3; unsigned :3; union struct equip eq; unsigned i;abc; abc.i255; printf(“%dn,abc.eq.d);運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:3提高篇C語言程序設(shè)計(jì)-提高篇-第4章位運(yùn)算習(xí)題習(xí)題4.1 編寫一個(gè)函數(shù)編寫一個(gè)函數(shù)getbits,從一個(gè),從一個(gè)16位的單元中取出
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年活牛運(yùn)輸合同
- 2025商業(yè)店鋪買賣合同(標(biāo)準(zhǔn)版)
- 初中生自我介紹【7篇】
- 2025年勞動(dòng)合同的疑義利益解釋原則分析
- 做好急診信息系統(tǒng)的建設(shè)與維護(hù)計(jì)劃
- 個(gè)人貸款過橋合同標(biāo)準(zhǔn)文本
- 歡迎新領(lǐng)導(dǎo)上任歡迎詞講話稿【4篇】
- 為職業(yè)生涯制定長期目標(biāo)計(jì)劃
- 債權(quán)出質(zhì)擔(dān)保合同標(biāo)準(zhǔn)文本
- 2024年中級(jí)經(jīng)濟(jì)師原題
- 對配合和服從總包管理的認(rèn)識(shí)和協(xié)調(diào)方案
- 2025年上海市各區(qū)高三語文一模試題匯編之文言文閱讀試題和答案
- 江蘇省常州市金壇區(qū)2023-2024學(xué)年小升初語文試卷(有答案)
- 專題11 浮力 課件中考物理復(fù)習(xí)
- 《橋梁工程中的預(yù)應(yīng)力混凝土技術(shù)》課件
- 學(xué)習(xí)通《形勢與政策》2025春章節(jié)測試答案
- DeepSeek介紹及其典型使用案例
- 浦發(fā)銀行個(gè)人信用報(bào)告異議申請表
- IQC(來料)檢測報(bào)告模板
- 韓國現(xiàn)代起亞skt100數(shù)控車床
- 公司師徒協(xié)議模板(共3頁)
評論
0/150
提交評論