版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算1 C51 C51的數(shù)據(jù)類型:常量與變量的數(shù)據(jù)類型:常量與變量l 常量:在程序運行中其值保持不變的量,可以為字符、十進制數(shù)、十六常量:在程序運行中其值保持不變的量,可以為字符、十進制數(shù)、十六進制數(shù)(用進制數(shù)(用0X0X表示)或八進制數(shù)(前用表示)或八進制數(shù)(前用0 0表示)表示)常量分為數(shù)值常量和符號型常量,如果是符號型常量,需要用宏常量分為數(shù)值常量和符號型常量,如果是符號型常量,需要用宏定義指令(定義指令(#define#define)對其進行定義)對其進行定義l 變量:在程序運行中其值可以改變的量。變量:在程序運行中其值可以改變的量。 一個變量由變量名
2、和變量值組成,變量名是存儲單元地址的符號表示,一個變量由變量名和變量值組成,變量名是存儲單元地址的符號表示,變量的值是該單元存放的內(nèi)容。變量的值是該單元存放的內(nèi)容。 定義一個變量,編譯系統(tǒng)會自動為其安排一個存儲單元,具體的地址值定義一個變量,編譯系統(tǒng)會自動為其安排一個存儲單元,具體的地址值用戶不必關(guān)心。用戶不必關(guān)心。 無論哪種數(shù)據(jù)都是存放在存儲單元中的,每一個數(shù)據(jù)究竟占用幾個單元無論哪種數(shù)據(jù)都是存放在存儲單元中的,每一個數(shù)據(jù)究竟占用幾個單元(即數(shù)據(jù)的長度)都要提供給編譯系統(tǒng),正如匯編語言中存放數(shù)據(jù)的單(即數(shù)據(jù)的長度)都要提供給編譯系統(tǒng),正如匯編語言中存放數(shù)據(jù)的單元要提供元要提供DBDB或或DW
3、DW偽指令進行定義,編譯系統(tǒng)以此為根據(jù)預(yù)留存儲單元。偽指令進行定義,編譯系統(tǒng)以此為根據(jù)預(yù)留存儲單元。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算1第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算2 基本類型基本類型 字符型字符型(unsigned char, signed char) 1字節(jié) 8位 整型整型基本型(unsigned int, signed int) 2字節(jié) 16位 長整型(unsigned long, signed long) 4字節(jié) 32位 C51中short int 等同于int 實型實型單精度(float) 4字節(jié) C51中double 等同于float 位型位型 (bit) 1位 (2
4、0H-2FH中可位尋址位定義為bit型)構(gòu)造類型構(gòu)造類型數(shù)組類型、結(jié)構(gòu)體類型、共用體、枚舉數(shù)組類型、結(jié)構(gòu)體類型、共用體、枚舉指針類型指針類型 data/idata/pdatadata/idata/pdata 1 1字節(jié) 1字節(jié)地址 內(nèi)部/內(nèi)部/外部數(shù) 據(jù)存貯器 code/xdatacode/xdata 2字節(jié) 2字節(jié)地址 外部程序/外部數(shù) 據(jù)存貯器指針通用指針通用指針 3字節(jié) 其中1字節(jié)為儲存器類型編 碼,2、 3字節(jié)為地址偏移量 訪問訪問SFRSFR的數(shù)據(jù)類型的數(shù)據(jù)類型sbit sbit 1bit SFR中的可位尋址位只能定義成sbit sfr sfr 1字節(jié) sfr16 sfr16 2字節(jié)
5、 第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算2第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算3第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算3注意:注意:1、字符型(、字符型(char)、整型(、整型(int) 及長整型(及長整型(long)均有符號型均有符號型(singed)和無符號和無符號(unsigned)型兩種,在選擇數(shù)據(jù)類型的時候要型兩種,在選擇數(shù)據(jù)類型的時候要注意,不要使用大量的、不必要的變量類型,以免導(dǎo)致注意,不要使用大量的、不必要的變量類型,以免導(dǎo)致C編譯器編譯器相應(yīng)地增加所調(diào)用的庫函數(shù)的數(shù)量,使運行速度變慢或出現(xiàn)程序相應(yīng)地增加所調(diào)用的庫函數(shù)的數(shù)量,使運行速度變慢或出現(xiàn)程序裝不進去的情況。裝不進去
6、的情況。C51如果不是必須,盡可能選擇如果不是必須,盡可能選擇unsigned型,這將使編譯器省卻符型,這將使編譯器省卻符號位的檢測,使生成的程序代碼比號位的檢測,使生成的程序代碼比signed類短得多。類短得多。因為程序要對因為程序要對signed的符號的符號進行判斷和處理,影響運算速度。進行判斷和處理,影響運算速度。2、程序編譯時,、程序編譯時,C51編譯器同編譯器同C編譯器相似,會自動進行類型轉(zhuǎn)換,編譯器相似,會自動進行類型轉(zhuǎn)換,轉(zhuǎn)換原則見本章。轉(zhuǎn)換原則見本章。3、51單片機內(nèi)部數(shù)據(jù)存儲器的可尋址位(單片機內(nèi)部數(shù)據(jù)存儲器的可尋址位(20H-2FH)通常通常定義定義為為bit型,而型,而s
7、fr的可位尋址位定義為的可位尋址位定義為sbit類型,類型,sbit類型只能在程類型只能在程序開始前定義。序開始前定義。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算4第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算44、關(guān)于指針型變量、關(guān)于指針型變量在匯編語言程序中,要取存貯單元在匯編語言程序中,要取存貯單元m的內(nèi)容可用直接尋址方式,的內(nèi)容可用直接尋址方式,也可用寄存器間接尋址方式。如果用也可用寄存器間接尋址方式。如果用R1寄存器指示寄存器指示m的地址,用的地址,用R1取取m單元的內(nèi)容。相對應(yīng)地在單元的內(nèi)容。相對應(yīng)地在C語言中用變量名表示取變量語言中用變量名表示取變量的值(相當(dāng)于直接尋址),也可用另一個變量(
8、如的值(相當(dāng)于直接尋址),也可用另一個變量(如P)存放)存放m的的地址,地址,P相當(dāng)于相當(dāng)于R1寄存器。用寄存器。用*P取得取得m單元的內(nèi)容(相當(dāng)于匯編單元的內(nèi)容(相當(dāng)于匯編語言的間接尋址方式),這時語言的間接尋址方式),這時P即為指針變量。即為指針變量。匯編語言和匯編語言和C語言的對照語言的對照直接尋址間接尋址匯編語言C51匯編語言C51mov n, mn=mmov R1, #mmov n,R1P=&mn=*P;5、C51可以把變量定義在某一存貯區(qū)中,訪問內(nèi)部數(shù)據(jù)存貯器可以把變量定義在某一存貯區(qū)中,訪問內(nèi)部數(shù)據(jù)存貯器(idata)比訪問外部數(shù)據(jù)存貯器(比訪問外部數(shù)據(jù)存貯器(xdata
9、)快,可將經(jīng)常使用變量快,可將經(jīng)常使用變量置于內(nèi)部存貯器,將較大及很少使用的數(shù)據(jù)變量置于外部存貯器。置于內(nèi)部存貯器,將較大及很少使用的數(shù)據(jù)變量置于外部存貯器。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算5v整型整數(shù) unsigned int 的范圍:065535signed int 的范圍: 3276832767Example: #include void main(void) int data a ; a=12345; a=? a=1234567; a=? 運行結(jié)果: a=12345 則 a=12345 a=1234567,則 a= -10617 Why?! Because: 12345(3039
10、H)的補碼是 0011 0000 0011 1001 1234567(12D687H)的補碼是 1 0010 1101 0110 1000 0111 截去多余部份(超過2個字節(jié)的左邊部分)后 其原碼為 1010 1001 0111 1001(-10617)第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算6數(shù)據(jù)存儲形式 字符型按ASCII碼存儲,整型以補碼存儲 示意圖 字符型 (字符a) 用一個字節(jié)存放該字符的ASCII值 整 型 (十進制數(shù)25037) 用兩個字節(jié)存放該數(shù)值的補碼,高位在前,低位在后 實 型指數(shù)(階碼)尾數(shù)(補碼) 用四個字節(jié)32位存放,符號位表示正負(fù)、階碼和尾數(shù)表示大小。注:第一位均為
11、符號位0110000101100001 11001101011000011010001010101011100110第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算7 0 0000000 00001000符號位:0正數(shù) 1負(fù)數(shù)正數(shù)的原碼=正數(shù)的補碼 負(fù)數(shù)的原碼和補碼按以下規(guī)則相互轉(zhuǎn)換: 符號位不變,數(shù)值位各位取反,末位加1。 0 0000000 00001000 1 0000000 00001000原碼補碼符號位數(shù)值位a=810=10002b=- 810=-10002真值 1 1111111 11110111 1 1111111 11111000第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算8尾數(shù)的位數(shù)決定數(shù)的
12、精度;階碼的位數(shù)決定數(shù)的范圍尾數(shù)的位數(shù)決定數(shù)的精度;階碼的位數(shù)決定數(shù)的范圍 S:符號位,:符號位,1表示負(fù),表示負(fù),0表示正;表示正;E:階碼,存在:階碼,存在2個字節(jié)中,偏移為個字節(jié)中,偏移為127;M:23位尾數(shù),最高位為位尾數(shù),最高位為1(指整數(shù)位,它省略不寫)。(指整數(shù)位,它省略不寫)。地址0123內(nèi)容SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算9 整型和字符型均可為unsigned (無符號型)此時 unsigned int 范圍 065535 unsigned char范圍0 255也可為signed(符號號型)即將符號位亦
13、作為數(shù)值位(默認(rèn)為signed)此時 int 范圍 -3276832767 char 范圍 -128 127 在C51程序中,字符型可與整型(255)相互通用不變Example: void main(void) void main(void) unsigned char c1; unsigned int c1; c1=9; c1=57; 思 考 兩者有什么區(qū)別? 9與9有何區(qū)別,若第2程序設(shè)c1=9,結(jié)果如何? lets try!注意事項注意事項第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算10常量:常量:在程序運行的過程中,其值不能改變的量v整型常量 十進制數(shù) 12 -12l 或 -12L 7000
14、00ul 八進制數(shù) 012 -012l 十六進制數(shù) 0 x12 -0 x12lv實型常量 十進制形式 123.45 2.0 ( 必有小數(shù)點) 指數(shù)形式 2.45e-4 1.13e3 (e或E前為數(shù),后為整數(shù)) 實型常量本身無單或雙精度,所有的實型常量均視為實型常量本身無單或雙精度,所有的實型常量均視為單精度類型單精度類型。v字符常量/字符串常量v符號常量3.2.1 常量常量第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算11Example:void main(void) char data c1=“a” ,c2; c2=98; c1=? c2=?結(jié)果: -108,98若讓c1分別等于“U”、“ABC”、
15、“A”結(jié)果不變字符常量字符常量Example:void main(void) char data c1=a ,c2; c2=98;c1=? C2=?結(jié)果: 97,98隨機值第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算12 與“”的區(qū)別 字符A只占1個字節(jié),而字符串常量“A“占2個字節(jié)。 問題(判斷正誤): char c=“China”; char c=China; “China”占幾個字節(jié)?141占幾個字節(jié)?0等于十進制數(shù)97即字符a字符串常量有關(guān)問題字符串常量有關(guān)問題第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算13C51語言中允許將程序中的常量定義為一語言中允許將程序中的常量定義為一個標(biāo)識符,稱為符號常
16、量。個標(biāo)識符,稱為符號常量。符號常量一般使用大寫英文字母表示,以區(qū)別于一般小寫字母表示的變量符號常量在使用前必須先定義,定義形式是:#define 例:#define PORTA 0 x3fff第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算14程序運行中,其值可以改變的量稱為變量,由變量名與變程序運行中,其值可以改變的量稱為變量,由變量名與變量值組成。量值組成。與常量相似,變量可分為整型變量、字符變量、浮點型變與常量相似,變量可分為整型變量、字符變量、浮點型變量與位變量等。量與位變量等。v賦值賦值 例:例: b=(a=3+5); a=b=c=d=3+5; (結(jié)果均為結(jié)果均為8) 例:例:int a=b
17、=c=d=3+5; (語法錯誤,除非(語法錯誤,除非b,c,d定義過)定義過) 正確:正確:int a, b=a=3+5; 例:例: c=3+(a=5)* *6 結(jié)果:結(jié)果:c=33,a=5(一個語句可以有幾個賦值運算)(一個語句可以有幾個賦值運算)v變量必須先定義后使用變量必須先定義后使用v變量名必須符合標(biāo)識符命名規(guī)則變量名必須符合標(biāo)識符命名規(guī)則 第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算15 此外,用戶還可根據(jù)自己的需要對數(shù)據(jù)類型重新定義。此外,用戶還可根據(jù)自己的需要對數(shù)據(jù)類型重新定義。 重新定義時需用到關(guān)鍵字重新定義時需用到關(guān)鍵字typedef,定義方法如下:,定義方法如下:typedef
18、已有的數(shù)據(jù)類型新的數(shù)據(jù)類型名已有的數(shù)據(jù)類型新的數(shù)據(jù)類型名typedef int WORD;WORD i,j;【注意注意】:一般,用:一般,用typedef定義的新數(shù)據(jù)類型用大寫字母定義的新數(shù)據(jù)類型用大寫字母表示。用表示。用typedef可以定義各種新的數(shù)據(jù)類型名,但不能可以定義各種新的數(shù)據(jù)類型名,但不能直接用來定義變量,它并不創(chuàng)造新的數(shù)據(jù)類型。直接用來定義變量,它并不創(chuàng)造新的數(shù)據(jù)類型。 用宏定義也可以實現(xiàn)上述功能用宏定義也可以實現(xiàn)上述功能第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算16v數(shù)據(jù)的類型級別數(shù)據(jù)類型級別由高到低:float(double)long unsigned int (char)v基
19、本規(guī)則q不同類型運算量參加運算,遵守“向高看齊”的類型一致化規(guī)則:將長度較短的運算量轉(zhuǎn)換為長度較長的運算量,以保證不丟失信息。 變換以一次一操作的方式進行: 所有char轉(zhuǎn)換為int型。 如沒有操作數(shù)為float,但有一個為long,另一個轉(zhuǎn)換為long。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算17 如沒有操作為long ,但有一個為unsigned,另一個轉(zhuǎn)換為unsigned。q將實型常量賦給整型變量,將被自動取整 int a=7.999999 ; 等效于 int a=7;q兩個整型數(shù)相除,其值也一定是整型數(shù)(取商之整數(shù)部分)。 3/2的值為1而非1.5第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算
20、18 例一: (int)3.5 的值是多少?例二: main() unsigned int x=5,z; float y=3.5; z=(int)y+x; 結(jié)果是什么?8一般形式: (類型名)(表達式)轉(zhuǎn)換后表達式的數(shù)據(jù)類型為新的類型,但表達式中變量本身類型不變。3程序執(zhí)行后y的類型是什么?第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算19 80C51單片機采用哈佛結(jié)構(gòu),RAM與ROM分開,SFR與片內(nèi)RAM統(tǒng)一編址。 KEIL CX51編譯器將變量、常量定義成不同的存儲類型(data, bdata, idata, pdata, xdata, code)的方法,將它們定位在不同的存儲區(qū)中。8051的變
21、量的存儲類型定義為:存儲類別存儲類別變量類型變量類型 存儲類型存儲類型 變量名變量名其中存儲種類與存儲類型為可選項。其中存儲種類與存儲類型為可選項。存儲類別主要有四種:自動(auto)(默認(rèn)的存儲種類)、外部(extern)、靜態(tài)(static)和寄存器(register)。存儲類型主要有:data,bdata,idata,pdata,xdata,code等。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算20變量的存儲類型變量的存儲類型vC51變量三大屬性: 數(shù)據(jù)類型存儲類別 存儲類型 1、數(shù)據(jù)類型 通過變量說明(定義)來規(guī)定其數(shù)據(jù)類型: 格式 數(shù)據(jù)類型關(guān)鍵字 變量名 如 char a; int b,
22、c ; float x,y; 為什么使用變量前要先對其數(shù)據(jù)類型進行“說明”好比看電影前先買票訂座 預(yù)留存儲空間(如char型為1個字節(jié),int型為2個字節(jié)) 確定存儲方式(如char型存放ASCII值,int型存放補碼值)第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算21五、變量的存儲類型五、變量的存儲類型v變量三大屬性: 數(shù)據(jù)類型存儲類別 存儲類型 2、存儲類別 決定變量的“壽命”(何時“生”,何時“滅”) 一個完整的變量說明格式如下: 存儲類別 數(shù)據(jù)類型 存儲類型 變量名 如 static int data x , y ;C51程序的存儲類別有: auto型(自動變量型,默認(rèn)) static型(靜
23、態(tài)變量型) extern型(外部變量型) register型(寄存器型)第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算22變量存儲類別變量存儲類別 register型(寄存器型)型(寄存器型)存取速度快,一般只允許23個,且限于char型和int型,通常用于循環(huán)變量。 auto型(自動變量型)型(自動變量型)優(yōu)點同一內(nèi)存區(qū)可被不同變量反復(fù)使用。以上兩種變量均屬于“動態(tài)存儲型”,即調(diào)用函數(shù)時才為這些變量分配單元,函數(shù)調(diào)用結(jié)束其值自動消失。 static型(靜態(tài)變量型)型(靜態(tài)變量型)程序執(zhí)行開始至結(jié)束,始終占用該存儲空間 extern型(外部變量型)型(外部變量型)同上,其值可供其他源文件使用以上兩種均
24、屬于“靜態(tài)存儲”性質(zhì),即從變量定義處開始,在整個程序執(zhí)行期間其值都存在 。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算23從變量的作用范圍來看,有從變量的作用范圍來看,有全局變量全局變量和和局部變量局部變量之分。之分。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算23變量存儲類別變量存儲類別1、局部變量、局部變量函數(shù)內(nèi)部或復(fù)合語句內(nèi)定義的變量函數(shù)內(nèi)部或復(fù)合語句內(nèi)定義的變量 autoauto(默認(rèn))(默認(rèn)) 所在函數(shù)調(diào)用結(jié)束時所在函數(shù)調(diào)用結(jié)束時局部變量局部變量 register register ,其值自動消失,其值自動消失 staticstatic 所有函數(shù)調(diào)用結(jié)束,其值仍保留所有函數(shù)調(diào)用結(jié)束,其值仍保留
25、如不賦初值,取初值為如不賦初值,取初值為0 0(數(shù)值型)或(數(shù)值型)或空格空格(字符型)(字符型) 所有形參都是局部變量;所有形參都是局部變量; 局部變量只在本函數(shù)或本復(fù)合語句內(nèi)才能使用,局部變量只在本函數(shù)或本復(fù)合語句內(nèi)才能使用,在此之外不能使用(視為不存在)在此之外不能使用(視為不存在)main函數(shù)函數(shù)也不例外。也不例外。局部變量可以與全局變量同名,但在這種情況下,局部變量可以與全局變量同名,但在這種情況下,局部變量的優(yōu)先級較高,而同名的全局變量在該功局部變量的優(yōu)先級較高,而同名的全局變量在該功能塊內(nèi)被暫時屏蔽。能塊內(nèi)被暫時屏蔽。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算24unsigned i
26、nt f(unsigned int a) unsigned int b=0; static unsigned int c=3; b+; c+; return a+b+c; void main(void) unsigned int a=2,i,b; for (i=0;ib?a:b; return c; main() int a=8,c; c=max(a,b); 如果主函數(shù)中沒有int a=8,結(jié)果? 【結(jié)果】 5如果讓主函數(shù)中int a=4或a=-1,結(jié)果? 【結(jié)果】 均為 5第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算29void num(void) extern int x,y; int a=15
27、,b=10; x=a-b; y=a+b;int x,y;main() int a=7,b=5; x=a+b; y=a-b; num( ); /x,y等于多少?等于多少?如果第三行不加上如果第三行不加上externextern呢?呢? 【結(jié)果】 5,25【結(jié)果】 12,2 第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算30從變量的存在時間來看,可分為靜態(tài)存儲變量和動態(tài)存從變量的存在時間來看,可分為靜態(tài)存儲變量和動態(tài)存儲變量。儲變量。v靜態(tài)存儲變量是指該變量在程序運行期間其存儲空間不靜態(tài)存儲變量是指該變量在程序運行期間其存儲空間不變,全局變量為靜態(tài)存儲變量;變,全局變量為靜態(tài)存儲變量;v動態(tài)存儲變量是指該
28、變量的存儲空間不確定,在程序運動態(tài)存儲變量是指該變量的存儲空間不確定,在程序運行期間需要動態(tài)地為該變量分配存儲空間,局部變量為行期間需要動態(tài)地為該變量分配存儲空間,局部變量為動態(tài)變量。動態(tài)變量。 變量的生存期 靜態(tài)存儲變量:與程序“共存亡” 動態(tài)存儲變量:與函數(shù)“共存亡” 寄存器變量:同動態(tài)變量未說明存儲類別時,函數(shù)內(nèi)定義的變量默認(rèn)為auto型。函數(shù)外定義的變量默認(rèn)為extern型。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算31int a=0;unsigned int fun (int i) a+=2*i; return a; void main(void) unsigned int a=10,c
29、,d; c=fun(a); d=a; 【結(jié)果】 c=20,d=10 第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算323 3、存儲類型、存儲類型表表3.1CX51存儲類型與存儲類型與8051存儲空間的對應(yīng)關(guān)系存儲空間的對應(yīng)關(guān)系 存儲類型存儲類型與存儲空間的對應(yīng)關(guān)系與存儲空間的對應(yīng)關(guān)系data直接尋址片內(nèi)數(shù)據(jù)存儲區(qū),速度快直接尋址片內(nèi)數(shù)據(jù)存儲區(qū),速度快(128字節(jié)字節(jié))bdata可位尋址片內(nèi)數(shù)據(jù)存儲區(qū),允許位與字節(jié)訪問可位尋址片內(nèi)數(shù)據(jù)存儲區(qū),允許位與字節(jié)訪問(16字字節(jié)節(jié))idata間接尋址片內(nèi)數(shù)據(jù)存儲區(qū),片內(nèi)全部間接尋址片內(nèi)數(shù)據(jù)存儲區(qū),片內(nèi)全部RAM地址空間地址空間(256字節(jié)字節(jié))pdata分頁尋址
30、片外數(shù)據(jù)存儲區(qū)分頁尋址片外數(shù)據(jù)存儲區(qū)(256字節(jié)字節(jié)),由,由MOVX R0訪問訪問xdata片外數(shù)據(jù)存儲區(qū)片外數(shù)據(jù)存儲區(qū)(64KB),由,由MOVX DPTR訪問訪問code片外程序存儲區(qū)片外程序存儲區(qū)(64KB),由,由MOVC A+DPTR訪問訪問第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算33片內(nèi)數(shù)據(jù)存儲區(qū):片內(nèi)數(shù)據(jù)存儲區(qū):data、bdata與與idata 當(dāng)使用當(dāng)使用data與與bdata存儲類型定義時,存儲類型定義時,CX51將它們將它們定位在片內(nèi)定位在片內(nèi)RAM。它存取數(shù)據(jù)快,但資源有限。它存取數(shù)據(jù)快,但資源有限。 片內(nèi)片內(nèi)RAM存放臨時性變量或使用頻率較高的變量。存放臨時性變量或使
31、用頻率較高的變量。片外數(shù)據(jù)存儲區(qū):片外數(shù)據(jù)存儲區(qū):pdata與與xdata pdata能訪問能訪問1頁(頁(256字節(jié))的外部字節(jié))的外部RAM,主要用,主要用于緊湊模式(于緊湊模式(Compact Mode)。)。 當(dāng)使用當(dāng)使用xdata存儲定義類型,其最大可尋址范圍為存儲定義類型,其最大可尋址范圍為64K。char data var1;bit bdata flags;float idata x,y,z;unsigned int pdata dimension;unsigned char xdata vector1044;注意:注意:l使用外部數(shù)據(jù)區(qū)的信息之前,必須用指使用外部數(shù)據(jù)區(qū)的信息之
32、前,必須用指令將它們移動到內(nèi)部數(shù)據(jù)區(qū)中;數(shù)據(jù)處理令將它們移動到內(nèi)部數(shù)據(jù)區(qū)中;數(shù)據(jù)處理完之后,將結(jié)果返回到片外數(shù)據(jù)存儲區(qū)。完之后,將結(jié)果返回到片外數(shù)據(jù)存儲區(qū)。l訪問片內(nèi)訪問片內(nèi)RAM比訪問外部比訪問外部RAM速度快,速度快,可將經(jīng)常使用的變量置于片內(nèi)數(shù)據(jù)存儲器,可將經(jīng)常使用的變量置于片內(nèi)數(shù)據(jù)存儲器,而將規(guī)模較大的或不常用的數(shù)據(jù)置于片外而將規(guī)模較大的或不常用的數(shù)據(jù)置于片外數(shù)據(jù)存儲器。數(shù)據(jù)存儲器。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算34程序存儲區(qū):程序存儲區(qū):codev當(dāng)使用當(dāng)使用code存儲類型定義數(shù)據(jù)時,編譯器會將其定義存儲類型定義數(shù)據(jù)時,編譯器會將其定義在代碼空間(在代碼空間(ROM或或EP
33、ROM)。)。v程序存儲區(qū)存放指令代碼及其它非易失信息。調(diào)試完程序存儲區(qū)存放指令代碼及其它非易失信息。調(diào)試完成的程序代碼被寫入成的程序代碼被寫入8051單片機的片內(nèi)單片機的片內(nèi)ROM/EPROM或片外或片外EPROM中,程序運行過程中,信息不能寫入。中,程序運行過程中,信息不能寫入。v如果定義變量時略去存儲類型標(biāo)志符,則按編譯時使如果定義變量時略去存儲類型標(biāo)志符,則按編譯時使用的存儲器模式來規(guī)定默認(rèn)存儲器類型,確定變量的用的存儲器模式來規(guī)定默認(rèn)存儲器類型,確定變量的存儲器空間。默認(rèn)的存儲類型由存儲器空間。默認(rèn)的存儲類型由SMALL,COMPACT和和LARGE存儲模式指令限制。存儲模式指令限制
34、。 存儲模式?jīng)Q定了存儲模式?jīng)Q定了存儲類型存儲類型、參數(shù)傳遞區(qū)參數(shù)傳遞區(qū)和和無明確無明確存儲類型說明的存儲類型存儲類型說明的存儲類型。注意:注意:l變量的存儲類別與存儲器類型是完全無關(guān)的。變量的存儲類別與存儲器類型是完全無關(guān)的。例如:例如:static unsigned char data x;在片內(nèi)數(shù)據(jù)存儲;在片內(nèi)數(shù)據(jù)存儲器中定義一個靜態(tài)無符號字符型變量。器中定義一個靜態(tài)無符號字符型變量。int y;定義一個自動整型變量,存儲器類型由編;定義一個自動整型變量,存儲器類型由編譯模式確定。譯模式確定。l允許在變量類型定義前定義存儲類型,但盡量允許在變量類型定義前定義存儲類型,但盡量不要這樣做。如定
35、義不要這樣做。如定義data char x與與char data x,但一般不建議使用前者。但一般不建議使用前者。 第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算35表存儲模式及說明表存儲模式及說明存儲模式存儲模式說明說明SMALLl所有對象在片內(nèi)所有對象在片內(nèi)RAM,最大,最大128字節(jié),默認(rèn)存儲類型字節(jié),默認(rèn)存儲類型datal參數(shù)及局部變量放入可直接尋址的片內(nèi)存儲器參數(shù)及局部變量放入可直接尋址的片內(nèi)存儲器l訪問方便,訪問方便,棧長棧長關(guān)鍵關(guān)鍵COMPACTl參數(shù)及局部變量放入分頁尋址的片外存儲區(qū),最大參數(shù)及局部變量放入分頁尋址的片外存儲區(qū),最大256字節(jié),字節(jié),默認(rèn)的存儲類型默認(rèn)的存儲類型pdat
36、al通過寄存器通過寄存器R0和和R1間接尋址間接尋址l??臻g位于??臻g位于8051系統(tǒng)內(nèi)部系統(tǒng)內(nèi)部RAM中,變量的高中,變量的高8位地址由位地址由P2口確定??诖_定。LARGEl參數(shù)及局部變量放入片外數(shù)據(jù)存儲區(qū),最大參數(shù)及局部變量放入片外數(shù)據(jù)存儲區(qū),最大64KB,默認(rèn)存,默認(rèn)存儲類型儲類型xdatal使用數(shù)據(jù)指針使用數(shù)據(jù)指針DPTR進行尋址進行尋址l訪問效率低。訪問效率低。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算36對于對于SFR引入了引入了sfr、sfr16及及sbit關(guān)鍵字,語法如下:關(guān)鍵字,語法如下:341sfrsfr 特殊功能寄存器名特殊功能寄存器名 地址常數(shù)地址常數(shù) ;特殊功能寄存器名
37、可以任意選取,但應(yīng)符合一般習(xí)慣。特殊功能寄存器名可以任意選取,但應(yīng)符合一般習(xí)慣?!咀⒁庾⒁狻縧sfr后面必須跟一個特殊功能寄存器名后面必須跟一個特殊功能寄存器名l等號后面的地址必須為常數(shù),等號后面的地址必須為常數(shù),l地址必須在地址必須在0 x800 xFF之間。之間。l不允許帶有運算符的表達式。不允許帶有運算符的表達式。lsfr前面不需加前面不需加char或或int關(guān)鍵字。例關(guān)鍵字。例sfr P1=0 x90; sfr SCON=0 x98。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算37342sfr16 對于雙字節(jié)特殊功能寄存器,低字節(jié)在高字節(jié)之前,對于雙字節(jié)特殊功能寄存器,低字節(jié)在高字節(jié)之前,可
38、使用可使用sfr16。定義時用低字節(jié)定義定義時用低字節(jié)定義例:例:sfr16 T2=0XCC。【注意注意】 使用使用sfr16定義的雙字節(jié)特殊功能寄存器,其高字節(jié)定義的雙字節(jié)特殊功能寄存器,其高字節(jié)地址必須在物理上直接位于低字節(jié)之后。地址必須在物理上直接位于低字節(jié)之后。 因此,因此,sfr16不能用于不能用于T0和和T1。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算38343sbit 在在51系列單片機經(jīng)常要訪問特殊功能寄存器中的某系列單片機經(jīng)常要訪問特殊功能寄存器中的某些位,些位,C51編譯器為此提供了一種擴充關(guān)鍵字編譯器為此提供了一種擴充關(guān)鍵字sbit,利,利用它可以定義可尋址對象。用它可以定義
39、可尋址對象。sbit定義共有定義共有三種三種方法:方法:lsbit位變量名位地址位變量名位地址 如:如:sbit OV=0 xD2;vsbit 位變量名特殊功能寄存名位變量名特殊功能寄存名 位位置位位置 如:如: sfr PSW=0 xD0; sbit OV=PSW2;vsbit 位變量名字節(jié)地址位變量名字節(jié)地址位地址位地址 如:如:sbit OV=0XD02;第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算39 1、SFR功能區(qū)功能區(qū) 可以直接采用上述方法進行定義??梢灾苯硬捎蒙鲜龇椒ㄟM行定義。 2、非、非SFR功能區(qū)功能區(qū)對于非對于非SFR的的bdata內(nèi)部內(nèi)部RAM區(qū)的可尋址位,使用區(qū)的可尋址位,
40、使用“sbit”必須先定義變量的數(shù)據(jù)類型和存儲類型,如必須先定義變量的數(shù)據(jù)類型和存儲類型,如int bdata ibase,char bdata bary4;然后可使用然后可使用“sbit”定義可獨立尋址訪問對象位:定義可獨立尋址訪問對象位:sbit mybit15=ibase15;sbit mybit0=bary07;對對ibase和和bary也可按字節(jié)尋址。也可按字節(jié)尋址。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算40 【注意注意】除非除非SFR,使用,使用sbit必須先用必須先用bdata關(guān)鍵字定義一個變關(guān)鍵字定義一個變量后,才能在該變量的基礎(chǔ)上使用量后,才能在該變量的基礎(chǔ)上使用sbit,且
41、,且bdata類型類型不能超過不能超過16bytes。不要搞混不要搞混bit與與sbit。bit與與sbit均是均是C51編譯器的一種擴編譯器的一種擴充數(shù)據(jù)類型、它們的值均是二進制的充數(shù)據(jù)類型、它們的值均是二進制的0或或1 。lbit用來定義和聲明一個普通位變量,它可以用于函用來定義和聲明一個普通位變量,它可以用于函數(shù)的參數(shù)傳遞和函數(shù)的返回值;數(shù)的參數(shù)傳遞和函數(shù)的返回值;lsbit用來定義和聲明一個從字節(jié)中定義的位變量用來定義和聲明一個從字節(jié)中定義的位變量后面的最大值取決于指定的基地址類型,如后面的最大值取決于指定的基地址類型,如char類型類型是是07;int類型是類型是015。第三章第三章
42、C51數(shù)據(jù)與運算數(shù)據(jù)與運算41 8051有有4個個8位的并行口,共位的并行口,共32根根I/O線。其中線。其中P0為為雙向三態(tài)口,雙向三態(tài)口,P1P3為準(zhǔn)雙向口。為準(zhǔn)雙向口。 8051沒有專門的地址總線和數(shù)據(jù)總線,在向外擴展沒有專門的地址總線和數(shù)據(jù)總線,在向外擴展存儲器和接口時,由存儲器和接口時,由P2輸出地址總線的高輸出地址總線的高8位,由位,由P0輸出地址總線的低輸出地址總線的低8位,同時對位,同時對P0采用總線復(fù)用技術(shù),采用總線復(fù)用技術(shù),P0口又兼做數(shù)據(jù)總線,由口又兼做數(shù)據(jù)總線,由P0分時輸出低分時輸出低8位地址與輸位地址與輸入入/輸出數(shù)據(jù)。輸出數(shù)據(jù)。 8051內(nèi)部的并行口是可位尋址的,
43、而大部分外部內(nèi)部的并行口是可位尋址的,而大部分外部I/O接口是字節(jié)尋址。接口是字節(jié)尋址。 對于片外擴展對于片外擴展I/O口,根據(jù)其硬件譯碼地址,將其視口,根據(jù)其硬件譯碼地址,將其視為片外數(shù)據(jù)存儲區(qū)的一個單元,使用為片外數(shù)據(jù)存儲區(qū)的一個單元,使用#define定義:定義:例:例:#include (允許用戶直接定義(允許用戶直接定義8051單片機的不同存儲區(qū))單片機的不同存儲區(qū))#define PORTA XBYTE 0 xffc0第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算42l標(biāo)準(zhǔn)標(biāo)準(zhǔn)8051的端口沒有數(shù)據(jù)專用寄存器。的端口沒有數(shù)據(jù)專用寄存器。P1P3有內(nèi)有內(nèi)部上拉電阻,可以作為輸入輸出。部上拉電
44、阻,可以作為輸入輸出。l寫端口就是寫一個要在端口引腳出現(xiàn)的值;寫端口就是寫一個要在端口引腳出現(xiàn)的值;l讀端口讀端口(引腳引腳),必須先寫一個,必須先寫一個1到所需的端口位。到所需的端口位。 例:設(shè)例:設(shè)P1.4為為DIP開關(guān)輸入位,開關(guān)輸入位,P1.5為綠色為綠色LED輸出輸出位,當(dāng)位,當(dāng)P1.4為高電平時,置為高電平時,置P1.5為低電平;否則,為低電平;否則,置置P1.5為高電平;把為高電平;把P1.0P1.3的值輸出到時的值輸出到時P3口的口的低四位。低四位。sfr P1=0 x90;sfr P3=0 xB0;sbit DIPswitch=P14; P1口位口位4為為DIP開關(guān)輸入開關(guān)輸
45、入sbit greenLED=P15; P1口位口位5為綠為綠LED輸出輸出void main(void) unsigned char inval; inval=0; while(1) inval=P1&0 xff; 讀讀P1口口 if(DIPswitch=1) 檢查檢查P1.4輸入是否為高輸入是否為高 greenLED=0; 置置P1.5輸出為低輸出為低 elsegreenLED=1; 置置P1.5輸出為高輸出為高 P3=(inval & 0 x0f) | (P3&0 xf0); 值輸出到值輸出到P3.0P3.3 ;第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算43位變量:位
46、變量:變量的類型是位型(變量的類型是位型(0或或1),定位在可位尋址),定位在可位尋址區(qū)域;區(qū)域;函數(shù)可包含類型為函數(shù)可包含類型為bit的參數(shù),也可返回類型為的參數(shù),也可返回類型為bit類型類型的返回值。的返回值?!咀⒁庾⒁狻?1)、位變量只能定義在內(nèi)部、位變量只能定義在內(nèi)部RAM 202FH可位尋址區(qū)間可位尋址區(qū)間(1)、使用禁止中斷、使用禁止中斷#pragma disable或包含明確的寄存器或包含明確的寄存器組切換組切換(using n)的函數(shù)不能返回位值;的函數(shù)不能返回位值;(2)、位變量不能定義成指針;、位變量不能定義成指針;(3)、不可以聲明位變量數(shù)組;、不可以聲明位變量數(shù)組;(4
47、)、位變量的存儲類型只能限制為、位變量的存儲類型只能限制為BDATA, DATA或或IDATA。例例 (1)bit direction_bit; (2)bit func(bit b0,bit b1) return b1; (4)bit a10, bit *a X不能這樣定義不能這樣定義 (3) int bdata ibase; sbit mybit0=ibase0; sbit mybit15=ibase15;第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算44在一些情況下,可能希望把一些變量定位在在一些情況下,可能希望把一些變量定位在51單片機某單片機某個固定地址空間上。個固定地址空間上。C51專門提供
48、了一個關(guān)鍵字專門提供了一個關(guān)鍵字_at_。_at_的使用格式如下:的使用格式如下:Type memory_space varible_name _at_ constant_memory_spacememory_space:如沒有定義變量的存儲空間,使用默認(rèn)的:如沒有定義變量的存儲空間,使用默認(rèn)的空間??臻g。type:變量類型變量類型 varible_name:變量名變量名constant_memory_space:常量,變量定位的地址值,常量,變量定位的地址值,必須在設(shè)置的物理地址范圍之內(nèi)。必須在設(shè)置的物理地址范圍之內(nèi)。例:例:struct linkstruct link idata *nex
49、t;unsinged char code *test;struct link idata list _at_ 0 x40;unsigned int xdata il _at_ 0 x8000;有時,也可在某些代碼段定義一個變量或有時,也可在某些代碼段定義一個變量或類型,在別的代碼段中對其進行定位。類型,在別的代碼段中對其進行定位?!咀⒁庾⒁狻浚海?)絕對地址的變量不可以被初始化;)絕對地址的變量不可以被初始化;(2)函數(shù)或)函數(shù)或bit類型的變量不可以被定義類型的變量不可以被定義為絕對地址。為絕對地址。 第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算451、對存貯器的絕對地址訪問、對存貯器的絕對地址訪
50、問利用地址訪問的頭文件利用地址訪問的頭文件absacc.h可對不同的存貯區(qū)進行訪問可對不同的存貯區(qū)進行訪問 。該頭文件的函數(shù)有:該頭文件的函數(shù)有:CBYTE (訪問(訪問code區(qū)字符型)區(qū)字符型)DBYTE (訪問(訪問data區(qū)字符型)區(qū)字符型)PBYTE (訪問(訪問pdata或或I/O區(qū)字符型)區(qū)字符型)XBYTE (訪問(訪問xdata或或I/O區(qū)字符型)區(qū)字符型)還有還有CWORD、DWORD、PWORD、XWORD四個函數(shù),它四個函數(shù),它們的訪問區(qū)域同上,只是訪問類型為們的訪問區(qū)域同上,只是訪問類型為int型。型。例:例:#include #define com XBYTE0 x
51、07ff則后面程序則后面程序com出現(xiàn)的地方,就是對地址為出現(xiàn)的地方,就是對地址為07ffH的外部的外部RAM或或I/O口進行訪問。口進行訪問。第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算46例:例:#include XWORD0 0 x9988; 即將即將9988H(int類型)送入外部類型)送入外部RAM的的0號和號和1號單元。號單元。注意:注意:absacc.h一定要包含進程序,一定要包含進程序,XBYTE必須大寫。必須大寫。2、對外部、對外部I/O口的訪問口的訪問由于單片機的由于單片機的I/O口和外部口和外部RAM統(tǒng)一編址,因此對統(tǒng)一編址,因此對I/O口地址口地址的訪問可用的訪問可用XBYT
52、E(movx DPTR)或或PBYTE(movx Ri)進進行。行。例:例: XBYTE0 xefff=0 x10; 將將10H輸出到地址為輸出到地址為0EFFFH端端口??凇5谌碌谌翪51數(shù)據(jù)與運算數(shù)據(jù)與運算47以下整數(shù)值中,正確的八進制或十六進制數(shù)是:A、0 x9a B、012 C、-0 x3A D、 090E、 7F F、0f53d G、0 x8.d7 H、 e-12答案:答案:A、B、C、G、H第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算481、算術(shù)運算算術(shù)運算符 + * * / % + + 其中模運算取整數(shù)除法的余數(shù),不能取其中模運算取整數(shù)除法的余數(shù),不能取float和和double的
53、模。的模。 例: 14%(-4)=0 x02 -14%(-4)=0 xfe 20.4%2(出錯) 例:若char a=7;float x=2.5,y=4.7; 則表達式 x+a%3x+a%3* *(int)(x+y)%2/4(int)(x+y)%2/4 的值是什么? 2.500000 (1/4或2/4為0) 例: float x,y; x%y; (出錯)第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算49優(yōu)先順序:由高到低:、/、%第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算50自加、自減運算符 +(自加運算符)-(自減運算符) 用法: +1 -1 運算 a、前綴形式 int i=5; x = + i ; y
54、= i ;int i=5; x = + i ; y= i ; (x=6, i =6, y=6) int i =5; + i ; x=y= i ;int i =5; + i ; x=y= i ; (x=6, i =6, y=6) b、后綴形式 int i =5; x = i +; y= i ;int i =5; x = i +; y= i ; (x=5, i =6, y=6) int i =5; i+ ; x= y= i ;int i =5; i+ ; x= y= i ; (x=6, i =6, y=6) 若對某變量自加/自減而不賦值,結(jié)果都是使該變量自身1;若某變量自加/自減的同時還要參加其他
55、運算,則前綴運算是先變化后運算,后綴運算是先運算后變化。注意:運算對象只能是整型變量, 5+或(x+y)+均為錯例一:main() int a=100; +a; a+; 運行中a=? 運算結(jié)果:0 x64 0 x65 0 x66例二:若 char x=3,y; 求下列運算后y和x的值 y=x+ -1; (0 x02 0 x04) y=+x -1; (0 x03 0 x04) y=x - - +1; (0 x04 0 x02)分析思路:先對右邊的表達式進行掃描,如果x+,先取x值完成表達式運算后再讓x自加1,如果+x,則先將x自加1后再代入表達式進行其他運算例三:若 int i=3 求下列運算后
56、y和z的值 y=(i+)+ (i+)+ (i+); y=0 x0c (3+4+5) z=(+i )+ (+i )+ (+i ); z=0 x0f (4+5+6)分析思路:先對右邊的表達式進行掃描,看是否需要先自加,如需要,就先作自加,然后再進行表達式的運算。思考: y=(+ i)+ (i+)+ (+ i); y=(+ i)+ (i+)+ (i+); y=0 x0e (4+4+6)y=0 x0d (4+4+5)第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算512、 自反算術(shù)賦值運算符(復(fù)合的賦值運算符) += -= *= /= 等 解法:將b*=看作b=b*(),其余類推 例: c=b*=a+3 相當(dāng)于
57、(1)a+3 (2)b=b*(a+3) (3)c=b 例:若 i 、j 的初值分別為3和4,則執(zhí)行 j+=i- =1 后i 、j 的值為多少?解題步驟:解題步驟: i=i-1=3-1=2 j=j+i=4+2=6結(jié)果:i=0 x2, j=0 x06第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算523、關(guān)系運算(比較運算)關(guān)系運算符: 高級別 = = 低級別 = != 關(guān)系表達式: 含有關(guān)系運算符的表達式 特別注意 aXb 之類算式的正確寫法 : a=x & x=b(錯誤寫法:a=X=b)【例】若x=1000,則y=(2x關(guān)系賦值逗號討論: if (1x算術(shù)運算符 關(guān)系運算符 & | 賦值
58、逗號第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算54v關(guān)于優(yōu)先級和結(jié)合方向: C語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。在表達式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行。如果在一個運算對象兩側(cè)的運算符的優(yōu)先級別相同,則按規(guī)定的結(jié)合方向處理?!纠吭O(shè)i、j初值分別為3和4,則執(zhí)行 j+=i-=1;后 i ,j的值為多少?【例】若x=7;則x+=x-=x+x的值是多少? (i=2,j=6)(-14)解法:從右到左,先做x=x-(x+x)=-7, 再做x=x+x=-14第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算554 4、位運算、位運算位操作符:&(與)、|(或)、(異或)、(補)、(右移)、(左移)。l位操作只能是整型或字符型數(shù),不能為實型數(shù)據(jù)。l除外,其它均為雙目運算符?!咀⒁狻縱移位不同于循環(huán),從一端移位并不送回到另一端去,移去的位永遠丟失,同時在另一端補0。v移位運算并不改變原變量本身,除非將移位的結(jié)果賦給另一變量。v位操作運算符與關(guān)系和邏輯運算符不同,其中關(guān)系和邏輯運算符結(jié)果不是0就是1,通常用在條件語句中;而相似的位操作可以為任意值。 v位
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度國有股權(quán)托管與監(jiān)管服務(wù)協(xié)議3篇
- 2025版酒水企業(yè)市場拓展與海外市場布局合同3篇
- 世界足球日介紹
- 臨床醫(yī)用嘔吐靠枕的設(shè)計與應(yīng)用
- Unit7 On the farm(說課稿)-2023-2024學(xué)年譯林版(三起)英語三年級下冊
- Unit 4 Living with technology Reading 1 說課稿-2024-2025學(xué)年高中英語牛津譯林版(2020)選擇性必修第二冊
- 全國粵教版信息技術(shù)七年級下冊第二章第四節(jié)《制作樓道自動感應(yīng)燈》說課稿
- 湖南省衡陽縣第四中學(xué)2024-2025學(xué)年高二上學(xué)期期末考試語文試卷(含答案)
- 第二次月考測評卷 Lesson 4 ~ 6 綜合測評卷(含答案)-2024-2025學(xué)年科普版(三起)英語四年級上冊
- 湖南省永州市2024-2025學(xué)年高一上學(xué)期期末質(zhì)量監(jiān)測政治試題(含答案)
- 2024版Amazon店鋪代運營與品牌授權(quán)及維權(quán)服務(wù)合同3篇
- 影視作品價值評估-洞察分析
- 環(huán)境因素控制措施
- 2024年下學(xué)期學(xué)校德育工作總結(jié)
- 《電化學(xué)儲能系統(tǒng)艙大件運輸特殊要求》
- 2025年采購部工作計劃
- 《防范于心反詐于行》中小學(xué)防范電信網(wǎng)絡(luò)詐騙知識宣傳課件
- 江蘇某小區(qū)園林施工組織設(shè)計方案
- 勘察工作質(zhì)量及保證措施
- 墊江縣中醫(yī)院2018年11月份臨床技能中心教學(xué)設(shè)備招標(biāo)項目招標(biāo)文件
- 排放源統(tǒng)計(環(huán)統(tǒng))年報填報指南
評論
0/150
提交評論