第3章C51數(shù)據(jù)與運算_第1頁
第3章C51數(shù)據(jù)與運算_第2頁
第3章C51數(shù)據(jù)與運算_第3頁
第3章C51數(shù)據(jù)與運算_第4頁
第3章C51數(shù)據(jù)與運算_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第三章第三章C51數(shù)據(jù)與運算數(shù)據(jù)與運算 3.1數(shù)據(jù)與數(shù)據(jù)類型數(shù)據(jù)與數(shù)據(jù)類型數(shù)據(jù)數(shù)據(jù)具有一定格式的數(shù)字或數(shù)值叫做數(shù)據(jù)具有一定格式的數(shù)字或數(shù)值叫做數(shù)據(jù)數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型數(shù)據(jù)結構數(shù)據(jù)結構數(shù)據(jù)按一定的數(shù)據(jù)類型進行的排數(shù)據(jù)按一定的數(shù)據(jù)類型進行的排列、組合、架構。列、組合、架構。C51編譯器具體支持的數(shù)據(jù)類型:編譯器具體支持的數(shù)據(jù)類型:位型,無符號字符,有符號字符,位型,無符號字符,有符號字符,無無符號整型,有符號整型,無符號長型,符號整型,有符號整型,無符號長型,有符號長型,有符號長型,浮點和指針類型等浮點和指針類型等C51數(shù)據(jù)類型與標準數(shù)據(jù)類型與標準C

2、數(shù)據(jù)類型的最大不同之處:位型數(shù)據(jù)類型的最大不同之處:位型位型(位型(bit)字符型(字符型(char)整型(整型(int)長整型(長整型(long)浮點型(浮點型(float)雙精度浮點型(雙精度浮點型(double)數(shù)組類型(數(shù)組類型(array)結構體類型(結構體類型(struct)共用體(共用體(union)枚舉(枚舉(enum)基本類型基本類型構造類型構造類型指針類型指針類型空類型空類型數(shù)據(jù)類型數(shù)據(jù)類型表表3-1 KEIL C51的數(shù)據(jù)類型的數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型長度長度(bit)長度長度(byte)值域值域bit110,1unsigned char810255signed char

3、81128127unsigned int 162065535signed int 1623276832767unsigned long32404294967295signed long 32421474836482147483647float 3241.176E383.40E+38(6位數(shù)字位數(shù)字)double6481.176E383.40E+38(10位數(shù)字位數(shù)字)一般指針一般指針243存儲空間存儲空間065535 在在C51語言程序中,有可能會出現(xiàn)在運算中數(shù)據(jù)類型語言程序中,有可能會出現(xiàn)在運算中數(shù)據(jù)類型不一致的情況。不一致的情況。C51允許任何標準數(shù)據(jù)類型的隱式轉(zhuǎn)換,允許任何標準數(shù)據(jù)類型的

4、隱式轉(zhuǎn)換,隱式轉(zhuǎn)換的優(yōu)先級順序如下:隱式轉(zhuǎn)換的優(yōu)先級順序如下: bitcharintlongfloat unsignedsigned 也就是說,當也就是說,當char型與型與int型進行運算時,先自動對型進行運算時,先自動對char型擴展為型擴展為int型,然后與型,然后與int型進行運算,運算結果為型進行運算,運算結果為int型。型。C51除了支持隱式類型轉(zhuǎn)換外,還可以通過強制類除了支持隱式類型轉(zhuǎn)換外,還可以通過強制類型轉(zhuǎn)換符型轉(zhuǎn)換符“()()”對數(shù)據(jù)類型進行人為的強制轉(zhuǎn)換。對數(shù)據(jù)類型進行人為的強制轉(zhuǎn)換。C5l編譯器除了能支持以上這些基本數(shù)據(jù)類型之外,編譯器除了能支持以上這些基本數(shù)據(jù)類型之外

5、,還能支持一些復雜的組合型數(shù)據(jù)類型,如數(shù)組類型、指還能支持一些復雜的組合型數(shù)據(jù)類型,如數(shù)組類型、指針類型、結構類型、聯(lián)合類型等這些復雜的數(shù)據(jù)類型。針類型、結構類型、聯(lián)合類型等這些復雜的數(shù)據(jù)類型。常量是指在程序執(zhí)行過程中其值不能改變的量。在常量是指在程序執(zhí)行過程中其值不能改變的量。在C51中支持整型常量、浮點型常量、字符型常量和字符串中支持整型常量、浮點型常量、字符型常量和字符串型常量。型常量。一、整型常量一、整型常量 整型常量也就是整型常數(shù),根據(jù)其值范圍在計算機中分整型常量也就是整型常數(shù),根據(jù)其值范圍在計算機中分配不同的字節(jié)數(shù)來存放。在配不同的字節(jié)數(shù)來存放。在C51C51中它可以表示成以下幾種

6、中它可以表示成以下幾種形式:形式: 十進制整數(shù)。如十進制整數(shù)。如234234、-56-56、0 0等。等。 十六進制整數(shù)。以十六進制整數(shù)。以0 x0 x開頭表示,如開頭表示,如0 x120 x12表示十六進制數(shù)表示十六進制數(shù)12H12H。 長整數(shù)。在長整數(shù)。在C51C51中當一個整數(shù)的值達到長整型的范圍,中當一個整數(shù)的值達到長整型的范圍,則該數(shù)按長整型存放,在存儲器中占四個字節(jié),另外,如則該數(shù)按長整型存放,在存儲器中占四個字節(jié),另外,如一個整數(shù)后面加一個字母一個整數(shù)后面加一個字母L L,這個數(shù)在存儲器中也按長整,這個數(shù)在存儲器中也按長整型存放。如型存放。如123L123L在存儲器中占四個字節(jié)。

7、在存儲器中占四個字節(jié)。3.2常量與變量常量與變量二浮點型常量二浮點型常量浮點型常量也就是實型常數(shù)。有十進制表示形式浮點型常量也就是實型常數(shù)。有十進制表示形式和指數(shù)表示形式。和指數(shù)表示形式。十進制表示形式又稱定點表示形式,由數(shù)字和小十進制表示形式又稱定點表示形式,由數(shù)字和小數(shù)點組成。如數(shù)點組成。如0.123、34.645等都是十進制數(shù)表示形等都是十進制數(shù)表示形式的浮點型常量。式的浮點型常量。指數(shù)表示形式為:指數(shù)表示形式為: 數(shù)字數(shù)字.數(shù)字數(shù)字e 數(shù)字數(shù)字例如:例如:123.456e-3、-3.123e2等都是指數(shù)形式的等都是指數(shù)形式的浮點型常量。浮點型常量。三字符型常量三字符型常量字符型常量是用

8、單引號引起的字符,如字符型常量是用單引號引起的字符,如a、1、F等。可以是可顯示的等。可以是可顯示的ASCII字符,也可以是不可顯字符,也可以是不可顯示的控制字符。對不可顯示的控制字符須在前面加上示的控制字符。對不可顯示的控制字符須在前面加上反斜杠反斜杠“”組成轉(zhuǎn)義字符。利用它可以完成一些特殊組成轉(zhuǎn)義字符。利用它可以完成一些特殊功能和輸出時的格式控制。常用的轉(zhuǎn)義字符如下表所功能和輸出時的格式控制。常用的轉(zhuǎn)義字符如下表所示。示。 轉(zhuǎn)義字符轉(zhuǎn)義字符 含含 義義ASCII碼(十六進制數(shù))碼(十六進制數(shù)) o空字符(空字符(null)00H n換行符(換行符(LF)0AH r回車符(回車符(CR)0D

9、H t水平制表符(水平制表符(HT)09H b退格符(退格符(BS)08H f換頁符(換頁符(FF)0CH 單引號單引號27H ”雙引號雙引號22H 反斜杠反斜杠5CH四字符串型常量四字符串型常量字符串型常量由雙引號字符串型常量由雙引號“”“”括起的字符組成。括起的字符組成。如如“D”、“1234”、“ABCD”等。注意字符串常量等。注意字符串常量與字符常量是不一樣,一個字符常量在計算機內(nèi)只用與字符常量是不一樣,一個字符常量在計算機內(nèi)只用一個字節(jié)存放,而一個字符串常量在內(nèi)存中存放時不一個字節(jié)存放,而一個字符串常量在內(nèi)存中存放時不僅雙引號內(nèi)的字符一個占一個字節(jié),而且系統(tǒng)會自動僅雙引號內(nèi)的字符一個

10、占一個字節(jié),而且系統(tǒng)會自動的在后面加一個轉(zhuǎn)義字符的在后面加一個轉(zhuǎn)義字符“o”作為字符串結束符。作為字符串結束符。因此不要將字符常量和字符串常量混淆,如字符常量因此不要將字符常量和字符串常量混淆,如字符常量A和字符串常量和字符串常量“A”是不一樣的。是不一樣的。常量常量在程序運行的過程中,其值不能改變的。在程序運行的過程中,其值不能改變的。變量變量在程序運行中,其值可以改變的。一個變量由兩在程序運行中,其值可以改變的。一個變量由兩部分組成:變量名和變量值。部分組成:變量名和變量值。 習慣上,習慣上,符號常量名用大寫,變量用小寫符號常量名用大寫,變量用小寫,以示區(qū)別。,以示區(qū)別。#defineCO

11、NST60main()intvariable,result;variable=20;result=variable*CONST;printf(result=%dn,result); 只有只有bitbit和和unsigned charunsigned char兩種數(shù)據(jù)類型可以直接支兩種數(shù)據(jù)類型可以直接支持機器指令,必須慎重變量和數(shù)據(jù)類型的選擇。持機器指令,必須慎重變量和數(shù)據(jù)類型的選擇。 用用C語言編寫單片機應用程序與標準的語言編寫單片機應用程序與標準的C語言程序的區(qū)別語言程序的區(qū)別:C語言編寫單片機應用程序時,需根據(jù)單片語言編寫單片機應用程序時,需根據(jù)單片機存儲結構及內(nèi)部資源定義相應的數(shù)據(jù)類型和

12、機存儲結構及內(nèi)部資源定義相應的數(shù)據(jù)類型和變量,而標準的變量,而標準的C語言程序不需要考慮這些問題語言程序不需要考慮這些問題C51包含的數(shù)據(jù)類型、變量存儲模式、輸入包含的數(shù)據(jù)類型、變量存儲模式、輸入輸出處理、函數(shù)等方面與標準的輸出處理、函數(shù)等方面與標準的C語言有一定的語言有一定的區(qū)別。其它的語法規(guī)則、程序結構及程序設計區(qū)別。其它的語法規(guī)則、程序結構及程序設計方法等與標準的方法等與標準的C語言程序設計相同。語言程序設計相同。C51的語法規(guī)定、程序結構及程序設計方的語法規(guī)定、程序結構及程序設計方法都與標準的法都與標準的C語言程序設計相同,但語言程序設計相同,但C51程程序與標準的序與標準的C程序在以

13、下程序在以下幾個方面不一樣幾個方面不一樣:(1)C51中定義的庫函數(shù)和標準中定義的庫函數(shù)和標準C語言定義語言定義的庫函數(shù)不同。標準的的庫函數(shù)不同。標準的C語言定義的庫函數(shù)是語言定義的庫函數(shù)是按通用微型計算機來定義的,而按通用微型計算機來定義的,而C51中的庫函中的庫函數(shù)是按數(shù)是按8051單片機相應情況來定義的;單片機相應情況來定義的;(2)C51中的數(shù)據(jù)類型與標準中的數(shù)據(jù)類型與標準C的數(shù)據(jù)類型的數(shù)據(jù)類型也有一定的區(qū)別,在也有一定的區(qū)別,在C51中還增加了幾種針對中還增加了幾種針對8051單片機特有的數(shù)據(jù)類型;單片機特有的數(shù)據(jù)類型;(3)C51變量的存儲模式與標準變量的存儲模式與標準C中變量的存

14、中變量的存儲模式不一樣,儲模式不一樣,C51中變量的存儲模式是與中變量的存儲模式是與8051單片機的存儲器緊密相關;單片機的存儲器緊密相關;(4)C51與標準與標準C的輸入輸出處理不一樣,的輸入輸出處理不一樣,C51中的輸入輸出是通過中的輸入輸出是通過8051串行口來完成的,串行口來完成的,輸入輸出指令執(zhí)行前必須要對串行口進行初始輸入輸出指令執(zhí)行前必須要對串行口進行初始化;化;(5)C51與標準與標準C在函數(shù)使用方面也有一定的在函數(shù)使用方面也有一定的區(qū)別,區(qū)別,C51中有專門的中斷函數(shù)中有專門的中斷函數(shù)。變量是在程序運行過程中其值可以改變的量。一變量是在程序運行過程中其值可以改變的量。一個變量

15、由兩部分組成:變量名和變量值。個變量由兩部分組成:變量名和變量值。在在C51中,變量在使用前必須對變量進行定義,中,變量在使用前必須對變量進行定義,指出變量的數(shù)據(jù)類型和存儲模式。以便編譯系統(tǒng)為指出變量的數(shù)據(jù)類型和存儲模式。以便編譯系統(tǒng)為它分配相應的存儲單元,定義的格式如下它分配相應的存儲單元,定義的格式如下存儲種類存儲種類數(shù)據(jù)類型數(shù)據(jù)類型存儲器類型存儲器類型變量名表變量名表存儲種類存儲種類存儲種類是指變量在程序執(zhí)行過程中的作用范圍。存儲種類是指變量在程序執(zhí)行過程中的作用范圍。C51變量的存儲種類有四種,分別是自動變量的存儲種類有四種,分別是自動(auto)、外部、外部(extern)、靜態(tài)、靜

16、態(tài)(static)和寄存器和寄存器(register)。1auto:使用使用auto定義的變量稱為自動變量,其作用范圍定義的變量稱為自動變量,其作用范圍在定義它的函數(shù)體或復合語句內(nèi)部,當定義它的函數(shù)體在定義它的函數(shù)體或復合語句內(nèi)部,當定義它的函數(shù)體或復合語句執(zhí)行時,或復合語句執(zhí)行時,C51才為該變量分配內(nèi)存空間,結才為該變量分配內(nèi)存空間,結束時占用的內(nèi)存空間釋放。自動變量一般分配在內(nèi)存的束時占用的內(nèi)存空間釋放。自動變量一般分配在內(nèi)存的堆??臻g中。定義變量時,如果省略存儲種類,則該變堆??臻g中。定義變量時,如果省略存儲種類,則該變量默認為自動量默認為自動(auto)變量。變量。2extern:使

17、用使用extern定義的變量稱為外部變量。在一個函數(shù)體內(nèi),定義的變量稱為外部變量。在一個函數(shù)體內(nèi),要使用一個已在該函數(shù)體外或別的程序中定義過的外部變量要使用一個已在該函數(shù)體外或別的程序中定義過的外部變量時,該變量在該函數(shù)體內(nèi)要用時,該變量在該函數(shù)體內(nèi)要用extern說明。外部變量被定義說明。外部變量被定義后分配固定的內(nèi)存空間,在程序整個執(zhí)行時間內(nèi)都有效,直后分配固定的內(nèi)存空間,在程序整個執(zhí)行時間內(nèi)都有效,直到程序結束才釋放。到程序結束才釋放。3static:使用使用static定義的變量稱為靜態(tài)變量。它又分為內(nèi)部靜定義的變量稱為靜態(tài)變量。它又分為內(nèi)部靜態(tài)變量和外部靜態(tài)變量。在函數(shù)體內(nèi)部定義的靜

18、態(tài)變量為內(nèi)態(tài)變量和外部靜態(tài)變量。在函數(shù)體內(nèi)部定義的靜態(tài)變量為內(nèi)部靜態(tài)變量,它在對應的函數(shù)體內(nèi)有效,一直存在,但在函部靜態(tài)變量,它在對應的函數(shù)體內(nèi)有效,一直存在,但在函數(shù)體外不可見,這樣不僅使變量在定義它的函數(shù)體外被保護,數(shù)體外不可見,這樣不僅使變量在定義它的函數(shù)體外被保護,還可以實現(xiàn)當離開函數(shù)時值不被改變。外部靜態(tài)變量上在函還可以實現(xiàn)當離開函數(shù)時值不被改變。外部靜態(tài)變量上在函數(shù)外部定義的靜態(tài)變量。它在程序中一直存在,但在定義的數(shù)外部定義的靜態(tài)變量。它在程序中一直存在,但在定義的范圍之外是不可見的。如在多文件或多模塊處理中,外部靜范圍之外是不可見的。如在多文件或多模塊處理中,外部靜態(tài)變量只在文件

19、內(nèi)部或模塊內(nèi)部有效。態(tài)變量只在文件內(nèi)部或模塊內(nèi)部有效。4register:使用使用register定義的變量稱為寄存器變量。它定義定義的變量稱為寄存器變量。它定義的變量存放在的變量存放在CPU內(nèi)部的寄存器中,處理速度快,但內(nèi)部的寄存器中,處理速度快,但數(shù)目少。數(shù)目少。C51編譯器編譯時能自動識別程序中使用頻率編譯器編譯時能自動識別程序中使用頻率最高的變量,并自動將其作為寄存器變量,用戶可以無最高的變量,并自動將其作為寄存器變量,用戶可以無需專門聲明。需專門聲明。 位變量位變量(bit)(bit):與:與80518051硬件特性操作有關的可以定義成硬件特性操作有關的可以定義成位變量。位變量必須定

20、位在位變量。位變量必須定位在80518051單片機片內(nèi)單片機片內(nèi)RAMRAM的位尋址空的位尋址空間中。間中。 字符變量字符變量(char)(char):字符變量的長度為:字符變量的長度為1 byte1 byte即即8 8位。這位。這很合適很合適80518051單片機,因為單片機,因為80518051單片機每次可處理單片機每次可處理8 8位數(shù)據(jù)。位數(shù)據(jù)。對于無符號變量對于無符號變量(unsigned char)(unsigned char)的值域范圍是的值域范圍是0255。對。對于有符號字符變量于有符號字符變量(signed char)(signed char),最具有重要意義的位,最具有重要意

21、義的位是最高位上的符號標志位是最高位上的符號標志位(msb)(msb)。此位為。此位為1 1代表代表“負負”,為,為0 0代表代表“正正”。有符號字符變量和無符號字符變量在表示。有符號字符變量和無符號字符變量在表示0127的數(shù)值時,其含義是一樣的,都是的數(shù)值時,其含義是一樣的,都是00 x7F。負數(shù)一。負數(shù)一般用補碼表示。般用補碼表示。 整型變量整型變量(int): 8051(int): 8051系列單片機將系列單片機將intint型變量的高位型變量的高位字節(jié)數(shù)存放在低地址字節(jié)中,低位字節(jié)數(shù)存放在高地址字字節(jié)數(shù)存放在低地址字節(jié)中,低位字節(jié)數(shù)存放在高地址字節(jié)中。有符號整型變量節(jié)中。有符號整型變量

22、(signed int)(signed int)也使用也使用msbmsb位作符號標位作符號標志位,并使用二進制補碼表示數(shù)值。可直接使用幾種專用志位,并使用二進制補碼表示數(shù)值。可直接使用幾種專用的機器指令來完成多字節(jié)的加、減、乘、除運算。的機器指令來完成多字節(jié)的加、減、乘、除運算。圖圖3.2 整型數(shù)的存儲結構整型數(shù)的存儲結構 0 x120 x34+0+1地址 0 x120 x340 x560 x78.+0+1+2+3地址 圖圖3.3 長整型變量的存儲結構長整型變量的存儲結構 浮點型變量浮點型變量(float): 浮點型變量為浮點型變量為32位,占位,占4個字節(jié),許多個字節(jié),許多復雜的數(shù)學表達式都

23、采用浮點變量數(shù)據(jù)類型。應用符號位表復雜的數(shù)學表達式都采用浮點變量數(shù)據(jù)類型。應用符號位表示數(shù)的符號,用階碼和尾數(shù)表示數(shù)的大小。示數(shù)的符號,用階碼和尾數(shù)表示數(shù)的大小。 用它們進行任何數(shù)學運算都需要使用由編譯器決定的各用它們進行任何數(shù)學運算都需要使用由編譯器決定的各種不同效率等級的庫函數(shù)。種不同效率等級的庫函數(shù)。KEIL C51的浮點變量數(shù)據(jù)類型的的浮點變量數(shù)據(jù)類型的使用格式與使用格式與IEEE-754標準有關,具有標準有關,具有24位精度,尾數(shù)的高位位精度,尾數(shù)的高位始終為始終為1,因而不保存,位的分布如下:,因而不保存,位的分布如下: 1位符號位。位符號位。 8位指數(shù)位。位指數(shù)位。 23位尾數(shù)。

24、位尾數(shù)。 符號位是最高位,尾數(shù)為低符號位是最高位,尾數(shù)為低23位,內(nèi)存中按字節(jié)存儲順序如下:位,內(nèi)存中按字節(jié)存儲順序如下:地址地址+0+1+2+3內(nèi)容內(nèi)容SEEEEEEEEMMMMMMMMMMMMMMM 其中,其中,S為符號位,為符號位,1表示負,表示負,0表示正;表示正;E為階碼;為階碼;M為為23位尾數(shù),最高位為位尾數(shù),最高位為“1”。 一個浮點數(shù)的數(shù)值范圍是(一個浮點數(shù)的數(shù)值范圍是(-1)2E-127(1.M) 浮點變量值浮點變量值 -12.5的十進制為:的十進制為:0 xC1480000,它按圖,它按圖3.4所所示方式存于內(nèi)存中。示方式存于內(nèi)存中。MMMMMMMM0 xC10 x480

25、 x000 x00+0+1+2+3地址 使用簡化形式定義數(shù)據(jù)類型。其方法是在源程序開頭使用使用簡化形式定義數(shù)據(jù)類型。其方法是在源程序開頭使用#define語句自定義簡化的類型標識符。例如:語句自定義簡化的類型標識符。例如:#define uchar unsigned char #define uint unsigned int 這樣,在編程中,就可以用這樣,在編程中,就可以用uchar代替代替unsigned char,用,用uint代替代替unsigned int來定義變量。來定義變量。 8051 8051系列機在物理上有四個存儲空間系列機在物理上有四個存儲空間 1 1)片內(nèi)程序存儲器空間)

26、片內(nèi)程序存儲器空間 2 2)片外程序存儲器空間)片外程序存儲器空間 3 3)片內(nèi)數(shù)據(jù)存儲器空間)片內(nèi)數(shù)據(jù)存儲器空間 4 4)片外數(shù)據(jù)存儲器空間)片外數(shù)據(jù)存儲器空間3.3 Cx51數(shù)據(jù)的存儲類型與數(shù)據(jù)的存儲類型與8051存儲結構存儲結構 80518051片內(nèi)數(shù)據(jù)存儲器可劃分為兩類:片內(nèi)數(shù)據(jù)存儲器可劃分為兩類:00H00H7FH7FH為片內(nèi)低為片內(nèi)低128128字節(jié)字節(jié)RAMRAM區(qū);區(qū); 80H80H0FFH0FFH為特殊功能寄存器區(qū)。為特殊功能寄存器區(qū)。 低字節(jié)低字節(jié)RAMRAM區(qū)又可以劃分為區(qū)又可以劃分為3 3個區(qū)域:個區(qū)域: 1 1)通用寄存器區(qū)()通用寄存器區(qū)(00H00H1FH1FH)

27、 每個寄存器可以用寄存器名尋址,也可直接用字每個寄存器可以用寄存器名尋址,也可直接用字節(jié)地址尋址。節(jié)地址尋址。 2 2)可位尋址區(qū))可位尋址區(qū) 可以按字節(jié)尋址操作,也可按位地址操作??梢园醋止?jié)尋址操作,也可按位地址操作。 3 3)用戶)用戶RAMRAM區(qū)區(qū)程序存儲器與數(shù)據(jù)存儲器嚴格分開,特殊功程序存儲器與數(shù)據(jù)存儲器嚴格分開,特殊功能寄存器與片內(nèi)數(shù)據(jù)存儲器統(tǒng)一編址。能寄存器與片內(nèi)數(shù)據(jù)存儲器統(tǒng)一編址。 片內(nèi)數(shù)據(jù)存儲區(qū)是存放臨時性傳遞變量或使用片內(nèi)數(shù)據(jù)存儲區(qū)是存放臨時性傳遞變量或使用頻率較高的變量的。頻率較高的變量的。 訪問片內(nèi)數(shù)據(jù)存儲器速度較快,經(jīng)常使用的訪問片內(nèi)數(shù)據(jù)存儲器速度較快,經(jīng)常使用的變量

28、置于片內(nèi)數(shù)據(jù)存儲器,而將不常用的置于片變量置于片內(nèi)數(shù)據(jù)存儲器,而將不常用的置于片外數(shù)據(jù)存儲器中。外數(shù)據(jù)存儲器中。尋址方式可使用直接和間接尋址。尋址方式可使用直接和間接尋址。表表 3.2 C51存儲器類型與存儲器類型與8051存儲空間的對應關系存儲空間的對應關系存儲器類型存儲器類型與存儲空間的對應關系與存儲空間的對應關系 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)

29、數(shù)據(jù)存儲區(qū),可訪問片內(nèi)全部RAM地址空間地址空間(256字節(jié)字節(jié)) pdata 分頁尋址片外數(shù)據(jù)存儲區(qū)分頁尋址片外數(shù)據(jù)存儲區(qū)(256字節(jié)字節(jié))由由MOV Ri訪問訪問(i=0,1) xdata 片外數(shù)據(jù)存儲區(qū)片外數(shù)據(jù)存儲區(qū)(64 KB)由由MOVX DPTR訪問訪問 code 程序存儲器程序存儲器64 KB空間,由空間,由MOVC DPTR訪問訪問表表3.3 C51存儲器類型及其數(shù)據(jù)長度和值域存儲器類型及其數(shù)據(jù)長度和值域存儲器類型存儲器類型長度長度(bit)長度長度(byte)值域范圍值域范圍data810255idata810255pdata810255xdata162065 535code

30、162065 535帶存儲類型的變量的定義的一般格式為:帶存儲類型的變量的定義的一般格式為: 存儲種類存儲種類數(shù)據(jù)類型數(shù)據(jù)類型存儲器類型存儲器類型變量名變量名帶存儲類型的變量定義舉例:帶存儲類型的變量定義舉例:char data var1;bit bdata flags;float idata x,y,z;unsigned int pdata var2;unsigned char vector34;表表 3.4 存儲器模式說明存儲器模式說明存儲器模式存儲器模式說說 明明SMALLSMALLSMALLSMALL模式稱為小編譯模式模式稱為小編譯模式, ,默認的存儲類型是默認的存儲類型是datada

31、ta,參數(shù)及,參數(shù)及局部變量放入可直接尋址片內(nèi)局部變量放入可直接尋址片內(nèi)RAMRAM的用戶區(qū)中的用戶區(qū)中( (最大最大128128字節(jié)字節(jié)) )。另外所有對象另外所有對象( (包括堆棧包括堆棧) ),都必須嵌入片內(nèi),都必須嵌入片內(nèi)RAMRAM。棧長很關鍵,。棧長很關鍵,因為實際棧長依賴于函數(shù)嵌套調(diào)用層數(shù)因為實際棧長依賴于函數(shù)嵌套調(diào)用層數(shù)COMPACTCOMPACTCOMPACTCOMPACT模式稱為緊湊編譯模式模式稱為緊湊編譯模式, ,默認的存儲類型是默認的存儲類型是pdatapdata,參,參數(shù)及局部變量放入分頁的外部數(shù)據(jù)存儲區(qū),通過數(shù)及局部變量放入分頁的外部數(shù)據(jù)存儲區(qū),通過R0或R1間接訪

32、問,??臻g位于片內(nèi)數(shù)據(jù)存儲區(qū)中間接訪問,棧空間位于片內(nèi)數(shù)據(jù)存儲區(qū)中LARGELARGELARGELARGE模式稱為大編譯模式,默認的存儲類型是模式稱為大編譯模式,默認的存儲類型是xdataxdata,參數(shù),參數(shù)及局部變量直接放入片外數(shù)據(jù)存儲區(qū),使用數(shù)據(jù)指針及局部變量直接放入片外數(shù)據(jù)存儲區(qū),使用數(shù)據(jù)指針DPTRDPTR來來進行尋址。用此數(shù)據(jù)指針進行訪問效率較低,尤其對兩個或進行尋址。用此數(shù)據(jù)指針進行訪問效率較低,尤其對兩個或多個字節(jié)的變量,這種數(shù)據(jù)類型的訪問機制直接影響代碼的多個字節(jié)的變量,這種數(shù)據(jù)類型的訪問機制直接影響代碼的長度長度3.4 8051特殊功能寄存器特殊功能寄存器(SFR)的的C5

33、1定義定義 8051單片機中,除了程序計數(shù)器單片機中,除了程序計數(shù)器PC和和4組工作寄存器組外,組工作寄存器組外,其它所有的寄存器均為特殊功能寄存器其它所有的寄存器均為特殊功能寄存器(SFR),分散在片內(nèi),分散在片內(nèi)RAM區(qū)的高區(qū)的高128字節(jié)中,地址范圍為字節(jié)中,地址范圍為80H0FFH。SFR中有中有11個個寄存器具有位尋址能力,它們的字節(jié)地址都能被寄存器具有位尋址能力,它們的字節(jié)地址都能被8整除,即字節(jié)整除,即字節(jié)地址是以地址是以8或或0為尾數(shù)的。為尾數(shù)的。 為了能直接訪問這些為了能直接訪問這些SFR,F(xiàn)ranklin C51提供了一種自主形提供了一種自主形式的定義方法,這種定義方法與標

34、準式的定義方法,這種定義方法與標準C語言不兼容,只適用于對語言不兼容,只適用于對8051系列單片機進行系列單片機進行C語言編程。特殊功能寄存器語言編程。特殊功能寄存器C51定義的一定義的一般語法格式如下:般語法格式如下:sfr sfr_name = int constant; sfr是定義語句的關鍵字,其后必須跟一個是定義語句的關鍵字,其后必須跟一個8051單片機單片機真實存在的特殊功能寄存器名,真實存在的特殊功能寄存器名,=后面必須是一個整型常數(shù),后面必須是一個整型常數(shù),不允許帶有運算符的表達式,是特殊功能寄存器不允許帶有運算符的表達式,是特殊功能寄存器sfr-name的字節(jié)地址,這個常數(shù)值

35、的范圍必須在的字節(jié)地址,這個常數(shù)值的范圍必須在SFR地址范圍內(nèi),位地址范圍內(nèi),位于于0 x800 xFF。例如:例如:sfr SCON=0 x98; /* 串口控制寄存器地址串口控制寄存器地址98H */sfr TMOD=0 x89; /* 定時器定時器/計數(shù)器方式控制寄存器地址計數(shù)器方式控制寄存器地址89H */ 8051系列單片機的特殊功能寄存器的數(shù)量與類型不盡系列單片機的特殊功能寄存器的數(shù)量與類型不盡相同,因此建議將所有特殊的相同,因此建議將所有特殊的sfr定義放入一個頭文件中,定義放入一個頭文件中,該文件應包括該文件應包括8051單片機系列機型中的單片機系列機型中的SFR定義。定義。C

36、51編編譯器的譯器的reg51.h頭文件就是這樣一個文件。頭文件就是這樣一個文件。 在新的在新的8051系列產(chǎn)品中,系列產(chǎn)品中,SFR在功能上經(jīng)常組合為在功能上經(jīng)常組合為16位值,當位值,當SFR的高字節(jié)地址直接位于低字節(jié)之后時,對的高字節(jié)地址直接位于低字節(jié)之后時,對16位位SFR的值可以直接進行訪問。例如的值可以直接進行訪問。例如52子系列的定時器子系列的定時器/計計數(shù)器數(shù)器2就是這種情況。為了有效地訪問這類就是這種情況。為了有效地訪問這類SFR,可使用,可使用關鍵字關鍵字sfr16來定義,其定義語句的語法格式與來定義,其定義語句的語法格式與8位位SFR相同,只是相同,只是=后面的地址必須用

37、后面的地址必須用16位位SFR的低字節(jié)地址,的低字節(jié)地址,即低字節(jié)地址作為即低字節(jié)地址作為sfr16的定義地址。的定義地址。例如:例如: sfr16 T2 = 0 xCC /*定時器定時器/計數(shù)器計數(shù)器2:T2低低8位位地址為地址為0CCH,T2高高8位地址為位地址為0CDH*/ 這種定義適用于所有新的這種定義適用于所有新的16位位SFR,但不能用于,但不能用于定時器定時器/計數(shù)器計數(shù)器0和和1。 對于位尋址的對于位尋址的SFR中的位,中的位,C51的擴充功能支持的擴充功能支持特殊位的定義,像特殊位的定義,像SFR一樣不與標準一樣不與標準C兼容,使用兼容,使用sbit來定義位尋址單元。來定義位

38、尋址單元。 第一種方法:第一種方法: sbit bit-name = sfr-nameint constant; sbit是定義語句的關鍵字,后跟一個尋址位符號名是定義語句的關鍵字,后跟一個尋址位符號名(該位符該位符號名必須是號名必須是8051單片機中規(guī)定的位名稱單片機中規(guī)定的位名稱),=后的后的sfr-name必必須是已定義過的須是已定義過的SFR的名字,的名字,后的整常數(shù)是尋址位在特殊功能后的整常數(shù)是尋址位在特殊功能寄存器寄存器sfr-name中的位號,必須是中的位號,必須是07范圍中的數(shù)。例如:范圍中的數(shù)。例如: sfr PSW=0 xD0 ; /* 定義定義PSW寄存器地址為寄存器地址

39、為D0H */ sbit OV=PSW2 ; /* 定義定義OV位為位為PSW.2,地址為,地址為D2H */ sbit CY=PSW7 ; /* 定義定義CY位為位為PSW.7,地址為,地址為D7H */ 第二種方法:第二種方法:sbit bit-name = int constantint constant; =后的后的int constant為尋址地址位所在的特殊功能寄存器的為尋址地址位所在的特殊功能寄存器的字節(jié)地址,字節(jié)地址,符號后的符號后的int constant為尋址位在特殊功能寄存器為尋址位在特殊功能寄存器中的位號。例如:中的位號。例如: sbit OV=0 xD02 ;/* 定

40、義定義OV位地址是位地址是D0H字節(jié)字節(jié)中的第中的第2位位 */ sbit CY=0 xD07 ; /* 定義定義CY位地址是位地址是D0H字節(jié)中字節(jié)中的第的第7位位 */ 第三種方法:第三種方法:sbit bit-name = int constant; =后的后的int constant為尋址位的絕對位地址。例如:為尋址位的絕對位地址。例如: sbit OV=0 xD2 ;/* 定義定義OV位地址為位地址為D2H */ sbit CY=0 xD7 ;/* 定義定義CY位地址為位地址為D7H */ 特殊功能位代表了一個獨立的定義類,不能與其它位定義特殊功能位代表了一個獨立的定義類,不能與其它

41、位定義和位域互換。和位域互換。3.5 8051并行接口及其并行接口及其Cx51定義定義 8051系列單片機并行系列單片機并行I/O接口除了芯片上的接口除了芯片上的4個個I/O口口(P0 P3)外,還可以在片外擴展外,還可以在片外擴展I/O口。口。8051單片機單片機I/O口與數(shù)據(jù)存儲器統(tǒng)口與數(shù)據(jù)存儲器統(tǒng)一編址,即把一個一編址,即把一個I/O口當作數(shù)據(jù)存儲器中的一個單元來看待??诋斪鲾?shù)據(jù)存儲器中的一個單元來看待。 使用使用C51進行編程時,進行編程時,8051片內(nèi)的片內(nèi)的I/O口與片外擴展的口與片外擴展的I/O可可以統(tǒng)一在一個頭文件中定義,也可以在程序中以統(tǒng)一在一個頭文件中定義,也可以在程序中(

42、一般在開始的位一般在開始的位置置)進行定義,其定義方法如下:進行定義,其定義方法如下: 對于對于8051片內(nèi)片內(nèi)I/O口按特殊功能寄存器方法定義。例如:口按特殊功能寄存器方法定義。例如:sfr P0=0 x80 ; /* 定義定義P0口,地址為口,地址為80H */sfr P1=0 x90 ; /* 定義定義P1口,地址為口,地址為90H */ 對于片外擴展對于片外擴展I/O口,則根據(jù)硬件譯碼地址,將其視作為片口,則根據(jù)硬件譯碼地址,將其視作為片外數(shù)據(jù)存儲器的一個單元,使用外數(shù)據(jù)存儲器的一個單元,使用#define語句進行定義。例如語句進行定義。例如#include #define PORTA

43、 XBYTE 0 xFFC0 absacc.h是是C51中絕對地址訪問函數(shù)的頭文件,將中絕對地址訪問函數(shù)的頭文件,將PORTA定定義為外部義為外部I/O口,地址為口,地址為 FFC0H,長度為,長度為8位。位。 一旦在頭文件或程序中對這些片外一旦在頭文件或程序中對這些片外I/O口進行定義后,在程口進行定義后,在程序中就可以自由使用變量名與其實際地址的聯(lián)系,以便使程序序中就可以自由使用變量名與其實際地址的聯(lián)系,以便使程序員能用軟件模擬員能用軟件模擬8051的硬件操作。的硬件操作。#include#defineucharunsignedcharsbitDIPswitch=P14;sbitgreen

44、LED=P15;voidmain(void)ucharinval;inval=0;while(1)if(DIPswitch=1)inval=P1&0 x0f;greenLED=0;elsegreenLED=1;P3=(P3&0 xf0)|inval; (1) 位變量位變量C51定義。使用定義。使用C51編程時,定義了位變量后,就編程時,定義了位變量后,就可以用定義了的變量來表示可以用定義了的變量來表示8051的位尋址單元。的位尋址單元。 位變量的位變量的C51定義的一般語法格式如下:定義的一般語法格式如下: 位類型標識符位類型標識符(bit) 位變量名;位變量名; 例如:例如:

45、bit direction_bit ;/* 把把direction_bit定義為位變量定義為位變量 */bit look_pointer ;/* 把把look_pointer定義為位變量定義為位變量 */3.6 位變量的位變量的C51定義定義 (2) 函數(shù)可包含類型為函數(shù)可包含類型為bit的參數(shù),也可以將其作為返回的參數(shù),也可以將其作為返回值。例如:值。例如: bit func(bit b0, bit b1) /* 變量變量b0,b1作為函數(shù)的參數(shù)作為函數(shù)的參數(shù) */ return (b1); /* 變量變量b1作為函數(shù)的返回值作為函數(shù)的返回值 */ 注意,使用注意,使用(#pragma di

46、sable)或包含明確的寄存器組切換或包含明確的寄存器組切換(using n)的函數(shù)不能返回位值,否則編輯器將會給出一個錯誤的函數(shù)不能返回位值,否則編輯器將會給出一個錯誤信息。信息。 (3) 對位變量定義的限制。位變量不能定義成一個指對位變量定義的限制。位變量不能定義成一個指針,如不能定義:針,如不能定義:bit * bit_pointer。不存在位數(shù)組,如。不存在位數(shù)組,如不能定義:不能定義:bit b_array 。 在位定義中,允許定義存儲類型,位變量都被放入一在位定義中,允許定義存儲類型,位變量都被放入一個位段,此段總位于個位段,此段總位于8051片內(nèi)的片內(nèi)的RAM區(qū)中。因此,存儲區(qū)中

47、。因此,存儲類型限制為類型限制為data和和idata,如果將位變量的存儲類型定義成,如果將位變量的存儲類型定義成其它存儲類型都將編譯出錯。其它存儲類型都將編譯出錯。例例1 先定義變量的數(shù)據(jù)類型和存儲類型:先定義變量的數(shù)據(jù)類型和存儲類型: bdata int ibase; /* 定義定義ibase為為bdata整型變量整型變量 */bdata char bary4; /* bary4定義為定義為bdata字符型數(shù)組字符型數(shù)組 */然后可使用然后可使用sbit定義可獨立尋址訪問的對象位:定義可獨立尋址訪問的對象位:sbit mybit0 = ibase0 ;/* mybit0定義為定義為ibas

48、e的第的第0位位 */sbit mybit15 = ibase15; /* mybit0定義為定義為ibase的第的第15位位 */sbit Ary07 = bary07 ; /* Ary07定義為定義為abry0的第的第7位位 */sbit Ary37 = bary37 ; /* Ary37定義為定義為abry3的第的第7位位 */3.7.1Cx51算術運算符及其運算符算術運算符及其運算符賦值運算符賦值運算符賦值運算符賦值運算符“=”,在,在C51中,它的功能是將一個數(shù)中,它的功能是將一個數(shù)據(jù)的值賦給一個變量,如據(jù)的值賦給一個變量,如x=10。利用賦值運算符將一個。利用賦值運算符將一個變量與

49、一個表達式連接起來的式子稱為賦值表達式,在變量與一個表達式連接起來的式子稱為賦值表達式,在賦值表達式的后面加一個分號賦值表達式的后面加一個分號“;”就構成了賦值語句,就構成了賦值語句,一個賦值語句的格式如下:一個賦值語句的格式如下:變量變量=表達式;表達式;執(zhí)行時先計算出右邊表達式的值,然后賦給左邊的執(zhí)行時先計算出右邊表達式的值,然后賦給左邊的變量。例如:變量。例如:x=8+9;/*將將8+9的值賦紿變量的值賦紿變量x*/x=y=5;/*將常數(shù)將常數(shù)5同時賦給變量同時賦給變量x和和y*/在在C51中,允許在一個語句中同時給多個變量賦值,中,允許在一個語句中同時給多個變量賦值,賦值順序自右向左。

50、賦值順序自右向左。3.7Cx51運算符、表達式及其規(guī)則運算符、表達式及其規(guī)則C51中支持的中支持的算術運算符算術運算符有:有:+加或取正值運算符加或取正值運算符-減或取負值運算符減或取負值運算符*乘運算符乘運算符/除運算符除運算符%取余運算符取余運算符加、減、乘運算相對比較簡單,而對于除運算,加、減、乘運算相對比較簡單,而對于除運算,如相除的兩個數(shù)為浮點數(shù),則運算的結果也為浮點數(shù),如相除的兩個數(shù)為浮點數(shù),則運算的結果也為浮點數(shù),如相除的兩個數(shù)為整數(shù),則運算的結果也為整數(shù),即如相除的兩個數(shù)為整數(shù),則運算的結果也為整數(shù),即為整除。如為整除。如25.0/20.0結果為結果為1.25,而,而25/20

51、結果為結果為1。對于取余運算,則要求參加運算的兩個數(shù)必須為對于取余運算,則要求參加運算的兩個數(shù)必須為整數(shù),運算結果為它們的余數(shù)。例如:整數(shù),運算結果為它們的余數(shù)。例如:x=5%3,結果,結果x的值為的值為2。2、算術表達式、優(yōu)先級與結合性、算術表達式、優(yōu)先級與結合性算術表達式:算術表達式:用算術運算符和括號將運算對象連接起來的用算術運算符和括號將運算對象連接起來的式子,運算對象包括常量、變量、函數(shù)、數(shù)組和結構等。式子,運算對象包括常量、變量、函數(shù)、數(shù)組和結構等。如:如:a*b/c-2.5+d優(yōu)先級優(yōu)先級指當運算對象兩側都有運算符時指當運算對象兩側都有運算符時, ,執(zhí)行運算的執(zhí)行運算的先后次序。

52、先后次序。 結合性結合性指當一個運算對象兩側的運算符的優(yōu)先級別指當一個運算對象兩側的運算符的優(yōu)先級別相同的運算順序。相同的運算順序。 算術運算符的算術運算符的優(yōu)先級規(guī)定優(yōu)先級規(guī)定為:先乘除模,后加減,括號為:先乘除模,后加減,括號最優(yōu)先。最優(yōu)先。 運算符執(zhí)行的先后取決與運算符的優(yōu)先級,當優(yōu)先級相運算符執(zhí)行的先后取決與運算符的優(yōu)先級,當優(yōu)先級相同時,在看看結合性。同時,在看看結合性。如:如:a-b*c等價于等價于a-(b*c)a*b/c等價于等價于(a*b)/c 圖中圖中“ ” 表示必定轉(zhuǎn)換。既使是同一種類型也按表示必定轉(zhuǎn)換。既使是同一種類型也按 轉(zhuǎn)轉(zhuǎn)換。即當遇到換。即當遇到char、short

53、時,系統(tǒng)一律將其轉(zhuǎn)換為時,系統(tǒng)一律將其轉(zhuǎn)換為int參與運算,參與運算,如如a + b,先轉(zhuǎn)換為先轉(zhuǎn)換為int,結果為,結果為 int。而當遇到。而當遇到float時,一時,一律轉(zhuǎn)換為律轉(zhuǎn)換為double參與運算。參與運算。轉(zhuǎn)換方法轉(zhuǎn)換方法:double float高低高低 longunsignedint char, short+數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換1. 1.自動(缺?。╊愋娃D(zhuǎn)換自動(缺?。╊愋娃D(zhuǎn)換 可根據(jù)自己的意愿利用強制類型轉(zhuǎn)換運算符可根據(jù)自己的意愿利用強制類型轉(zhuǎn)換運算符將一個算術表達式轉(zhuǎn)換為所需類型將一個算術表達式轉(zhuǎn)換為所需類型強制類型轉(zhuǎn)換格式強制類型轉(zhuǎn)換格式: (類型名類型名) (表

54、達式表達式)例如例如: (double) a 將將a轉(zhuǎn)換為轉(zhuǎn)換為double(int) (x+y) 將將x+y轉(zhuǎn)換為轉(zhuǎn)換為int(float) (5%3) 將將5%3轉(zhuǎn)換為轉(zhuǎn)換為float2. 2.強制類型轉(zhuǎn)換運算符強制類型轉(zhuǎn)換運算符“()()”3.7.2、Cx51關系運算符、表達式及優(yōu)先級關系運算符、表達式及優(yōu)先級大于大于=大于或等于大于或等于=測試等于測試等于!=測試不等于測試不等于前前4種關系運算符(種關系運算符(、=)優(yōu)先級相同,后)優(yōu)先級相同,后兩種也相同;前兩種也相同;前4種優(yōu)先級高于后兩種種優(yōu)先級高于后兩種2.關系運算符的優(yōu)先級關系運算符的優(yōu)先級關系運算符優(yōu)先級如右圖關系運算符優(yōu)

55、先級如右圖:算術運算符算術運算符賦值運算符賦值運算符關系運算符關系運算符高高低低舉例舉例: ca+b c(a+b)ab!=c (ab)!=ca= =bc a= =(bc a=(bc)關系運算符的結合性為左結合關系運算符的結合性為左結合關系表達式:用關系運算符連接起來的表達式關系表達式:用關系運算符連接起來的表達式格式:格式:說明:說明: 關系表達式的結果只有兩種即關系表達式的結果只有兩種即“真真”和和“假假”,其,其中中“真真”用用“”表示、表示、“假假”用用“”表示。表示。 判斷一個量是否為真時,等于判斷一個量是否為真時,等于0表示假,非表示假,非0都是真。都是真。3.7.3、Cx51邏輯運

56、算符、表達式及優(yōu)先級邏輯運算符、表達式及優(yōu)先級&邏輯邏輯“與與”(AND)|邏輯邏輯“或或”(OR)!邏輯邏輯“非非”(NOR)“&”和和“|”是雙目運算符,要求有兩個運算對象;而是雙目運算符,要求有兩個運算對象;而“!”是單目運算符,只要求有一個運算對象。是單目運算符,只要求有一個運算對象。邏輯表達式的結合性為自左向右邏輯表達式的結合性為自左向右邏輯表達式:用邏輯運算符關系運算符或邏輯表達式:用邏輯運算符關系運算符或邏輯量連接起來的式子稱為邏輯表達式。邏輯量連接起來的式子稱為邏輯表達式。邏輯表達式的值應該是一個邏輯量真或假邏輯表達式的值應該是一個邏輯量真或假邏輯表達式的值與關

57、系表達式的值相同,邏輯表達式的值與關系表達式的值相同,以以0代表假,以代表假,以1代表真。代表真。例如:若例如:若a=8,b=3,c=0,則!,則!a為假,為假,a&b為真,為真,b&c為假為假3.7.4、Cx51位操作及其表達式位操作及其表達式&按位與按位與|按位或按位或按位異或按位異或按位取反按位取反位右移位右移除了按位取反運算符除了按位取反運算符“”以外,以上位操作運算以外,以上位操作運算符都是兩目運算符,即要求運算符兩側各有一個運符都是兩目運算符,即要求運算符兩側各有一個運算對象。算對象。位運算位運算只能是只能是整型或字符型數(shù),不能為實型數(shù)據(jù)整型或字符型數(shù),不能為實型數(shù)據(jù)“&”:參加運算的兩個運算對象,若兩者相應的位都為:參加運算的兩個運算對象,若兩者相應的位都為1,則該位結果值為則該位結果值為1,否則為,否則為0。“|”:參加運算的兩個對象,若兩者相應的位中有一個為:參加運算的兩個對象,若兩者相應的位中有一個為1,則該位結果為,則該位結果為1“”:參加

溫馨提示

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

評論

0/150

提交評論