版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C#實(shí)用教程第第5章章 Windows應(yīng)用程序應(yīng)用程序 第第4章章 面向?qū)ο缶幊踢M(jìn)階面向?qū)ο缶幊踢M(jìn)階第第3章章 面向?qū)ο缶幊袒A(chǔ)面向?qū)ο缶幊袒A(chǔ)第第2章章 C#編程基礎(chǔ)編程基礎(chǔ) 第第1章章 C#快速入門快速入門 C# 實(shí)用教程第第10章章 Web應(yīng)用程序應(yīng)用程序 第第9章章 C#多線程技術(shù)多線程技術(shù)第第8章章 數(shù)據(jù)庫應(yīng)用數(shù)據(jù)庫應(yīng)用第第7章章 文件操作文件操作 第第6章章 GDI+編程編程1.1 C#的優(yōu)勢 作為編程語言,作為編程語言,C#是現(xiàn)代的、簡單的、完是現(xiàn)代的、簡單的、完全面向?qū)ο蟮?,而且是類型安全的。重要的是,全面向?qū)ο蟮模沂穷愋桶踩?。重要的是,C#是一種現(xiàn)代編程語言。在類、名字
2、空間、方是一種現(xiàn)代編程語言。在類、名字空間、方法重載和異常處理等方面,法重載和異常處理等方面,C#去掉了去掉了C+中的中的許多復(fù)雜性,借鑒和修改了許多復(fù)雜性,借鑒和修改了Java的許多特性,的許多特性,使其更加易于使用,不易出錯(cuò)。使其更加易于使用,不易出錯(cuò)。下面列舉了一些下面列舉了一些C#在設(shè)計(jì)上的優(yōu)點(diǎn):在設(shè)計(jì)上的優(yōu)點(diǎn): 1.1 C#的優(yōu)勢面向?qū)ο竺嫦驅(qū)ο?現(xiàn)代性現(xiàn)代性 類型安全性類型安全性 版本處理技術(shù)版本處理技術(shù) C#在設(shè)計(jì)上的在設(shè)計(jì)上的優(yōu)點(diǎn)優(yōu)點(diǎn) 簡單性簡單性 1.沒有指針是沒有指針是C#的一個(gè)顯著特性的一個(gè)顯著特性, 用戶使用一種可操控的(用戶使用一種可操控的(Managed)代碼進(jìn)行工
3、作時(shí),直接的內(nèi)存存取,將是不允許的。)代碼進(jìn)行工作時(shí),直接的內(nèi)存存取,將是不允許的。 2.在在C#中不再需要記住那些源于不同處理器結(jié)構(gòu)的數(shù)據(jù)類型中不再需要記住那些源于不同處理器結(jié)構(gòu)的數(shù)據(jù)類型 1.用戶可以使用一個(gè)新的用戶可以使用一個(gè)新的decimal數(shù)據(jù)類型進(jìn)行貨幣計(jì)算。數(shù)據(jù)類型進(jìn)行貨幣計(jì)算。2.C#通過代碼訪問安全機(jī)制來保證安全性,根據(jù)代碼的身份來源,通過代碼訪問安全機(jī)制來保證安全性,根據(jù)代碼的身份來源,可以分為不同的安全級別,不同級別的代碼在被調(diào)用時(shí)會(huì)受到不同可以分為不同的安全級別,不同級別的代碼在被調(diào)用時(shí)會(huì)受到不同的限制。的限制。 1.C#支持面向?qū)ο蟮乃嘘P(guān)鍵概念:封裝、繼承和多態(tài)性。
4、支持面向?qū)ο蟮乃嘘P(guān)鍵概念:封裝、繼承和多態(tài)性。 2. C#的繼承機(jī)制只允許一個(gè)基類。如果需要多重繼承,用戶可以的繼承機(jī)制只允許一個(gè)基類。如果需要多重繼承,用戶可以使用接口。使用接口。 1.C#實(shí)施了最嚴(yán)格的類型安全機(jī)制來保護(hù)它自身及其垃圾收集器。實(shí)施了最嚴(yán)格的類型安全機(jī)制來保護(hù)它自身及其垃圾收集器。 2.邊界檢查。邊界檢查。 3.算術(shù)運(yùn)算溢出檢查。算術(shù)運(yùn)算溢出檢查。 4. C#中傳遞的引用參數(shù)是類型安全的。中傳遞的引用參數(shù)是類型安全的。 C#盡其所能支持盡其所能支持DLL版本處理功能版本處理功能,雖然雖然C#自己并不能保證提供自己并不能保證提供正確的版本處理結(jié)果,但它為程序員提供了這種版本處
5、理的可能性正確的版本處理結(jié)果,但它為程序員提供了這種版本處理的可能性。有了這個(gè)適當(dāng)?shù)闹С?,開發(fā)者可以確保當(dāng)他開發(fā)的類庫升級時(shí),。有了這個(gè)適當(dāng)?shù)闹С郑_發(fā)者可以確保當(dāng)他開發(fā)的類庫升級時(shí),會(huì)與已有的客戶應(yīng)用保持二進(jìn)制級別上的兼容性。會(huì)與已有的客戶應(yīng)用保持二進(jìn)制級別上的兼容性。1.2 第一個(gè)C#程序首先看首先看控制臺應(yīng)用程序控制臺應(yīng)用程序的版本。的版本?!纠?.1】 在控制臺窗口中輸出在控制臺窗口中輸出“Hello World!”字樣。字樣。在在Visual C#.NET開發(fā)環(huán)境中新建一個(gè)控制臺應(yīng)用程序項(xiàng)目開發(fā)環(huán)境中新建一個(gè)控制臺應(yīng)用程序項(xiàng)目,并在源代碼文件中輸入如下語句:并在源代碼文件中輸入如下
6、語句:using System;class HelloWorldpublic static void Main()Console.WriteLine(Hello World!); 程序運(yùn)行結(jié)果下圖所示。程序運(yùn)行結(jié)果下圖所示。 Hello World! 將此內(nèi)容保存到文件將此內(nèi)容保存到文件EX1_1.cs中,然后選擇菜單中,然后選擇菜單“調(diào)調(diào)試試”“啟動(dòng)啟動(dòng)”或直接按或直接按F5鍵運(yùn)行此程序。鍵運(yùn)行此程序。 也可以不使用也可以不使用Visual C#.NET環(huán)境,直接用文本編輯工具輸環(huán)境,直接用文本編輯工具輸入以上代碼,并且保存到入以上代碼,并且保存到Helloworld.cs文件中,再通過開始
7、菜文件中,再通過開始菜單的單的“程序程序”“Microsoft Visual Studio 2005”“Visual Studio Tools”“Visual Studio 2005命令提示命令提示”打開命令行打開命令行窗口,在命令窗口中輸入:窗口,在命令窗口中輸入:csc /target:exe EX1_1.cs程序運(yùn)行結(jié)果如圖程序運(yùn)行結(jié)果如圖1.1所示。所示。Hello World!下面再看下面再看Windows應(yīng)用程序應(yīng)用程序的版本。的版本。【例例1.2】 彈出一個(gè)消息對話框顯示彈出一個(gè)消息對話框顯示“Hello World!”字樣。字樣。用用“Windows應(yīng)用程序應(yīng)用程序”模板建立項(xiàng)
8、目,或者使用文本編輯工模板建立項(xiàng)目,或者使用文本編輯工具輸入源代碼如下:具輸入源代碼如下:using System;using System.Windows.Forms;class HelloWorldpublic static void Main() MessageBox.Show(Hello World,Message from C#); 這次需要增加對這次需要增加對System.Windows.Forms命名空間的引命名空間的引用,選擇菜單用,選擇菜單“項(xiàng)目項(xiàng)目” “添加引用添加引用”打開打開“添加引用添加引用”對對話框,在列表中找到并選中話框,在列表中找到并選中“System.Wind
9、ows.Forms.dll”,然后單擊然后單擊“選擇選擇”按鈕,最后單擊按鈕,最后單擊“確定確定”按鈕完成添加。將按鈕完成添加。將文件另存為文件另存為EX1_2.cs,在開發(fā)環(huán)境中按,在開發(fā)環(huán)境中按F5鍵編譯運(yùn)行程序,如鍵編譯運(yùn)行程序,如果用命令行方式編譯請參照控制臺版,編譯命令如下:果用命令行方式編譯請參照控制臺版,編譯命令如下:csc /target:winexe EX1_2.cs程序的運(yùn)行結(jié)果如圖程序的運(yùn)行結(jié)果如圖1.2所示。所示。 通過上述兩段代碼來認(rèn)識通過上述兩段代碼來認(rèn)識C#:1代碼最前面是以代碼最前面是以using關(guān)鍵字開始的命名空間導(dǎo)入語句,然關(guān)鍵字開始的命名空間導(dǎo)入語句,然后
10、是使用后是使用class關(guān)鍵字對類關(guān)鍵字對類HelloWorld的定義。的定義。2命名空間是為了防止相同名字的不同標(biāo)識符發(fā)生沖突而設(shè)計(jì)命名空間是為了防止相同名字的不同標(biāo)識符發(fā)生沖突而設(shè)計(jì)的隔離機(jī)制。的隔離機(jī)制。 3在在.NET框架類庫中提供的不同組件都被包含在一定的命名框架類庫中提供的不同組件都被包含在一定的命名空間中,所以要使用這些組件也必須通過空間中,所以要使用這些組件也必須通過using關(guān)鍵字開放相關(guān)鍵字開放相應(yīng)的命名空間,使得相應(yīng)的標(biāo)識符對編譯器可見,如果沒有使應(yīng)的命名空間,使得相應(yīng)的標(biāo)識符對編譯器可見,如果沒有使用用using關(guān)鍵字,那么相應(yīng)的標(biāo)識符就應(yīng)包含完整的空間路徑關(guān)鍵字,那么
11、相應(yīng)的標(biāo)識符就應(yīng)包含完整的空間路徑。4由于由于C#是一種完全的面向?qū)ο蟮恼Z言,所以不會(huì)有獨(dú)立于是一種完全的面向?qū)ο蟮恼Z言,所以不會(huì)有獨(dú)立于類的代碼出現(xiàn),應(yīng)用程序的入口也必須是類的方法,類的代碼出現(xiàn),應(yīng)用程序的入口也必須是類的方法,C#規(guī)定命規(guī)定命名為名為Main的方法作為程序的入口的方法作為程序的入口 5C#是一種大小寫敏感的語言是一種大小寫敏感的語言 !第第2章章 C#編程基礎(chǔ)編程基礎(chǔ)C#的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句及數(shù)組等概念是及數(shù)組等概念是C#程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識是編寫程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識
12、是編寫正確程序的前提。正確程序的前提。 2.1 基本類型基本類型C#的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句及數(shù)組等概念是及數(shù)組等概念是C#程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識是編寫程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識是編寫正確程序的前提。正確程序的前提。第第2章章 C#編程基礎(chǔ)編程基礎(chǔ)C#的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句及數(shù)組等概念是及數(shù)組等概念是C#程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識是編寫程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識是編寫正確程序的前提。正確程序的前提。 2.2
13、.1 值類型值類型所謂所謂值類型值類型就是一個(gè)包含實(shí)際數(shù)據(jù)的就是一個(gè)包含實(shí)際數(shù)據(jù)的量。當(dāng)定義一個(gè)值類型的變量時(shí),量。當(dāng)定義一個(gè)值類型的變量時(shí),C#會(huì)根據(jù)它所聲明的類型,以會(huì)根據(jù)它所聲明的類型,以堆棧堆棧方式方式分配一塊大小相適應(yīng)的存儲區(qū)域給這分配一塊大小相適應(yīng)的存儲區(qū)域給這個(gè)變量,隨后對這個(gè)變量的讀個(gè)變量,隨后對這個(gè)變量的讀/寫操作寫操作就直接在這塊內(nèi)存區(qū)域進(jìn)行。就直接在這塊內(nèi)存區(qū)域進(jìn)行。 .例如:例如:int iNum=10; / 分配一個(gè)分配一個(gè)32位內(nèi)位內(nèi)存區(qū)域給變量存區(qū)域給變量iNum,并將,并將10放入該放入該內(nèi)存區(qū)域內(nèi)存區(qū)域iNum=iNum+10; / 從變量從變量iNum中取出
14、值,加上中取出值,加上10,再將計(jì)算,再將計(jì)算結(jié)果賦給結(jié)果賦給iNum圖圖2.1 值類型操作值類型操作示意圖示意圖表表2.1 C#簡單類型簡單類型C#關(guān)鍵字.NET CTS類型名說 明范圍和精度boolSystem.Boolean邏輯值(真或假)true, falsesbyteSystem.SByte8位有符號整數(shù)類型128127byteSystem.Byte8位無符號整數(shù)類型0255shortSystem.Int1616位有符號整數(shù)類型3276832767ushortSystem.UInt1616位無符號整數(shù)類型065535intSystem.Int3232位有符號整數(shù)類型214748364
15、82147483647 C#中的值類型包括:簡單類型、枚舉類型和結(jié)構(gòu)類型。中的值類型包括:簡單類型、枚舉類型和結(jié)構(gòu)類型。續(xù)表續(xù)表C#關(guān)鍵字關(guān)鍵字.NET CTS類型名類型名說說 明明范圍和精度范圍和精度uintSystem.Uint3232位無符號整數(shù)類型04294967295longSystem.Int6464位有符號整數(shù)類型92233720368547758089223372036854775807ulongSystem.UInt6464位無符號整數(shù)類型018446744073709551615charSystem.Char16位字符類型所有的Unicode編碼字符floatSystem.
16、Single32位單精度浮點(diǎn)類型(大約7個(gè)有效十進(jìn)制數(shù)位)doubleSystem.Double64位雙精度浮點(diǎn)類型(大約1516個(gè)有效十進(jìn)制數(shù)位)decimalSystem.Decimal128位高精度十進(jìn)制數(shù)類型(大約2829個(gè)有效十進(jìn)制數(shù)位) 表中表中“C#關(guān)鍵字關(guān)鍵字”是指在是指在C#中聲明變量時(shí)可使用的類型說明符。中聲明變量時(shí)可使用的類型說明符。2.1.2 引用類型引用類型引用類型引用類型包括包括class(類)、(類)、interface(接口)、數(shù)(接口)、數(shù)組、組、delegate(委托)、(委托)、object和和string。其中。其中object和和string是兩個(gè)比較
17、特殊的類型。是兩個(gè)比較特殊的類型。object是是C#中所有類型(包括所有的值類型和引用類型)的中所有類型(包括所有的值類型和引用類型)的根類。根類。string類型是一個(gè)從類型是一個(gè)從object類直接繼承的密封類直接繼承的密封類型(不能再被繼承),其實(shí)例表示類型(不能再被繼承),其實(shí)例表示Unicode字符字符串。串。 一個(gè)引用類型的變量不存儲它們所代表的實(shí)際一個(gè)引用類型的變量不存儲它們所代表的實(shí)際數(shù)據(jù),而是存儲實(shí)際數(shù)據(jù)的引用。數(shù)據(jù),而是存儲實(shí)際數(shù)據(jù)的引用。引用類型分引用類型分兩步兩步創(chuàng)建:首先在堆棧上創(chuàng)建一個(gè)引用變量,然后在堆創(chuàng)建:首先在堆棧上創(chuàng)建一個(gè)引用變量,然后在堆上創(chuàng)建對象本身,再
18、把這個(gè)內(nèi)存的句柄(也是內(nèi)存上創(chuàng)建對象本身,再把這個(gè)內(nèi)存的句柄(也是內(nèi)存的首地址)賦給引用變量。的首地址)賦給引用變量。 例如:string s1, s2;s1=ABCD; s2 = s1; 其中,s1、s2是指向字符串的引用變量,s1的值是字符串ABCD存放在內(nèi)存的地址,這就是對字符串的引用,兩個(gè)引用型變量之間的賦值,使得s2、s1都是對ABCD的引用,如圖2.2所示。 圖2.2 引用類型賦值示意引用類型的值是引用類型實(shí)例的引用,特殊值引用類型的值是引用類型實(shí)例的引用,特殊值null適適用于所有引用類型,它表明沒有任何引用的對象。用于所有引用類型,它表明沒有任何引用的對象。當(dāng)然也可能有若干引用
19、類型的變量同時(shí)引用一個(gè)對當(dāng)然也可能有若干引用類型的變量同時(shí)引用一個(gè)對象的實(shí)例,對任何一個(gè)引用變量作出修改都會(huì)導(dǎo)致象的實(shí)例,對任何一個(gè)引用變量作出修改都會(huì)導(dǎo)致該對象的值的修改。該對象的值的修改。 注意:注意:堆棧堆棧是按先進(jìn)后出(是按先進(jìn)后出(FILO)的原則存儲數(shù)據(jù))的原則存儲數(shù)據(jù)項(xiàng)的一種數(shù)據(jù)結(jié)構(gòu);項(xiàng)的一種數(shù)據(jù)結(jié)構(gòu);堆(堆(heap)則是用于動(dòng)態(tài)內(nèi)存則是用于動(dòng)態(tài)內(nèi)存分配的一塊內(nèi)存區(qū)域,可以按任意順序和大小進(jìn)行分配的一塊內(nèi)存區(qū)域,可以按任意順序和大小進(jìn)行分配和釋放。分配和釋放。C#中,值類型就分配在堆棧中,堆棧內(nèi)存區(qū)域內(nèi)保中,值類型就分配在堆棧中,堆棧內(nèi)存區(qū)域內(nèi)保存著值類型的值,內(nèi)存區(qū)域可以通過
20、變量名來存取存著值類型的值,內(nèi)存區(qū)域可以通過變量名來存取。引用類型分配在堆中,對象分配在堆時(shí),返回的。引用類型分配在堆中,對象分配在堆時(shí),返回的是地址,這個(gè)地址被賦值給引用。是地址,這個(gè)地址被賦值給引用。 可以把值類型與引用類型的值賦給可以把值類型與引用類型的值賦給object類型類型變量,變量,C#用用“裝箱裝箱”和和“拆箱拆箱”來實(shí)現(xiàn)值類型與引來實(shí)現(xiàn)值類型與引用類型之間的用類型之間的轉(zhuǎn)換轉(zhuǎn)換?!把b箱裝箱”就是將值類型包裝成引用類型的處理過程就是將值類型包裝成引用類型的處理過程。當(dāng)一個(gè)值類型被要求轉(zhuǎn)換成一個(gè)。當(dāng)一個(gè)值類型被要求轉(zhuǎn)換成一個(gè)object對象時(shí),對象時(shí),“裝箱裝箱”操作自動(dòng)進(jìn)行,它
21、首先創(chuàng)建一個(gè)對象實(shí)例操作自動(dòng)進(jìn)行,它首先創(chuàng)建一個(gè)對象實(shí)例,然后把值類型的值復(fù)制到這個(gè)對象實(shí)例,最后由,然后把值類型的值復(fù)制到這個(gè)對象實(shí)例,最后由object對象引用這個(gè)對象實(shí)例。對象引用這個(gè)對象實(shí)例。2.1.3 值類型與引用類型的關(guān)系值類型與引用類型的關(guān)系例如例如: using System;class Demo public static void Main ( ) int x = 123; object obj1=x; / 裝箱操作裝箱操作 x = x+100; / 改變改變x的值的值,此時(shí),此時(shí)obj1的值并不會(huì)隨之改變的值并不會(huì)隨之改變 Console.WriteLine ( x= 0
22、 , x ); / x=223 Console.WriteLine ( obj1= 0 , obj1 ); / obj1=123 該實(shí)例的該實(shí)例的“裝箱裝箱”操作說明如操作說明如圖圖2.3所示。所示。該實(shí)例的該實(shí)例的“裝箱裝箱”操作說明如圖操作說明如圖2.3所示。所示。“拆箱拆箱”操作與操作與“裝箱裝箱”相反相反,它是將一個(gè),它是將一個(gè)object類型轉(zhuǎn)類型轉(zhuǎn)換成值類型。首先檢查由換成值類型。首先檢查由object引用的對象實(shí)例值類引用的對象實(shí)例值類型的包裝值,然后把實(shí)例中型的包裝值,然后把實(shí)例中的值復(fù)制到值類型的變量中的值復(fù)制到值類型的變量中。注意:注意:當(dāng)一個(gè)當(dāng)一個(gè)“裝箱裝箱”操作操作把值
23、類型轉(zhuǎn)換為一個(gè)引用類把值類型轉(zhuǎn)換為一個(gè)引用類型時(shí),不需要顯式地強(qiáng)制類型時(shí),不需要顯式地強(qiáng)制類型轉(zhuǎn)換;型轉(zhuǎn)換;而拆箱操作把引用類型轉(zhuǎn)換而拆箱操作把引用類型轉(zhuǎn)換到值類型時(shí),由于它可以強(qiáng)到值類型時(shí),由于它可以強(qiáng)制轉(zhuǎn)換到任何可以相容的值制轉(zhuǎn)換到任何可以相容的值類型,所以必須顯式地強(qiáng)制類型,所以必須顯式地強(qiáng)制類型轉(zhuǎn)換。類型轉(zhuǎn)換。using System;class Demo public static void Main ( ) int x = 123, y; object obj1=x; / 裝箱操裝箱操作作 x = x+100; / 改變改變x的值,此時(shí)的值,此時(shí)obj1的值并不會(huì)隨之改變的值并不會(huì)
24、隨之改變 y = (int) obj1; / 拆箱操拆箱操作,必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換作,必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換 Console.WriteLine ( x= 0 , x ); / x=223 Console.WriteLine ( obj1= 0 , obj1 ); / obj1=123 2.2 變量與常量變量與常量C#的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句及的基本數(shù)據(jù)類型、變量、常量、表達(dá)式、程序流程控制語句及數(shù)組等概念是數(shù)組等概念是C#程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識是編寫正確程序設(shè)計(jì)的基礎(chǔ),掌握這些基本知識是編寫正確程序的前提。程序的前提。 2.2.1 常量常量 常量,顧名思義
25、就是在程序運(yùn)行期間其值不會(huì)改變的量,它通常常量,顧名思義就是在程序運(yùn)行期間其值不會(huì)改變的量,它通??梢苑譃樽置娉A亢头柍A?。常量及其使用非常直觀,以能讀可以分為字面常量和符號常量。常量及其使用非常直觀,以能讀懂的固定格式表示固定的數(shù)值,每一種值類型都有自己的常量表懂的固定格式表示固定的數(shù)值,每一種值類型都有自己的常量表示形式。示形式。對于一個(gè)整數(shù)值,默認(rèn)的類型就是能保存它的最小整數(shù)類型,其類對于一個(gè)整數(shù)值,默認(rèn)的類型就是能保存它的最小整數(shù)類型,其類型可以分為型可以分為int、uint、long或或ulong。如果默認(rèn)類型不是想要的類。如果默認(rèn)類型不是想要的類型,可以在常量后面加后綴(型,可以
26、在常量后面加后綴(U或或L)來明確指定其類型。)來明確指定其類型。在常量后面加在常量后面加L或或l(不區(qū)分大小寫)表示長整型。例如:(不區(qū)分大小寫)表示長整型。例如:32 / 這是一個(gè)這是一個(gè)int類型類型32L / 這是一個(gè)這是一個(gè)long類型類型在常量后面加在常量后面加U或或u(不區(qū)分大小寫)表示無符號整數(shù)。例如:(不區(qū)分大小寫)表示無符號整數(shù)。例如:128U / 這是一個(gè)這是一個(gè)uint 類型類型128UL / 這是一個(gè)這是一個(gè)ulong類型類型整型常量既可以采用十進(jìn)制也可以采用十六進(jìn)制,不加特別說明默整型常量既可以采用十進(jìn)制也可以采用十六進(jìn)制,不加特別說明默認(rèn)為十進(jìn)制,在數(shù)值前面加認(rèn)為
27、十進(jìn)制,在數(shù)值前面加0 x(或(或0X)則表示十六進(jìn)制數(shù),十六)則表示十六進(jìn)制數(shù),十六進(jìn)制基數(shù)用進(jìn)制基數(shù)用09、AF(或(或af),例如:),例如:0 x20 / 十六進(jìn)制數(shù)十六進(jìn)制數(shù)20,相當(dāng)于十進(jìn)制數(shù),相當(dāng)于十進(jìn)制數(shù)320 x1F / 十六進(jìn)制數(shù)十六進(jìn)制數(shù)1F,相當(dāng)于十進(jìn)制數(shù),相當(dāng)于十進(jìn)制數(shù)311整數(shù)常量整數(shù)常量一般帶小數(shù)點(diǎn)的數(shù)或用科學(xué)計(jì)數(shù)法表示的數(shù)都被認(rèn)為是一般帶小數(shù)點(diǎn)的數(shù)或用科學(xué)計(jì)數(shù)法表示的數(shù)都被認(rèn)為是浮點(diǎn)數(shù)浮點(diǎn)數(shù),它的數(shù)據(jù)類型默認(rèn)為,它的數(shù)據(jù)類型默認(rèn)為double類型,但也可以加后綴符表明三類型,但也可以加后綴符表明三種不同的浮點(diǎn)格式數(shù)種不同的浮點(diǎn)格式數(shù)定點(diǎn)數(shù)定點(diǎn)數(shù)(Fixed Po
28、int Number)。在這種表達(dá)方式中,小數(shù)點(diǎn))。在這種表達(dá)方式中,小數(shù)點(diǎn)固定的位于實(shí)數(shù)所有數(shù)字中間的某個(gè)位置固定的位于實(shí)數(shù)所有數(shù)字中間的某個(gè)位置.在數(shù)字后面加在數(shù)字后面加F(f)表示是表示是float類型。類型。在數(shù)字后面加在數(shù)字后面加D(d)表示是表示是double類型。類型。在數(shù)字后面加在數(shù)字后面加M(m)表示是表示是decimal類型。類型。例如:例如: 3.14 , 3.14e2, 0.168E 2 / 這些都是這些都是double類型常量,類型常量,其中其中3.14e2相當(dāng)于相當(dāng)于,/ 0.618E 2 相當(dāng)于相當(dāng)于3.14F, 0.168f / 這些都是這些都是float類型常
29、量類型常量3.14D, 0.168d / 這些都是這些都是double類型常量類型常量3.14M, 0.168m / 這些都是這些都是decimal類型常量類型常量2浮點(diǎn)常量浮點(diǎn)常量字符常量字符常量,簡單地說,簡單地說,就是用單引號括起來的單個(gè)字符就是用單引號括起來的單個(gè)字符,如,如A,它占,它占16位,以無符號整型數(shù)的形式存儲這個(gè)字符所對應(yīng)的位,以無符號整型數(shù)的形式存儲這個(gè)字符所對應(yīng)的Unicode代碼。這對于大多數(shù)圖形字符是可行的,但對一些非代碼。這對于大多數(shù)圖形字符是可行的,但對一些非圖形的控制字符(如回車符)則行不通,所以字符常量的表達(dá)圖形的控制字符(如回車符)則行不通,所以字符常量的
30、表達(dá)有若干種形式。有若干種形式。單引號括起的一個(gè)字符,如單引號括起的一個(gè)字符,如A。十六進(jìn)制的換碼系列,以十六進(jìn)制的換碼系列,以“x”或或“X”開始,后面跟開始,后面跟4位十六進(jìn)位十六進(jìn)制數(shù),如制數(shù),如 X0041 。Unicode碼表示形式,以碼表示形式,以“U”或或“u”開始,后面跟開始,后面跟4位十六位十六進(jìn)制數(shù),如進(jìn)制數(shù),如 U0041。顯式轉(zhuǎn)換整數(shù)字符代碼,如(顯式轉(zhuǎn)換整數(shù)字符代碼,如(char)65。字符轉(zhuǎn)義系列,如表字符轉(zhuǎn)義系列,如表2.2所示。所示。3字符常量字符常量 轉(zhuǎn)轉(zhuǎn) 義義 字字 符符含含 義義Unicode碼碼轉(zhuǎn)轉(zhuǎn) 義義 字字 符符含含 義義Unicode碼碼單引號u0
31、027b退格符u0008雙引號u0022f走紙換頁符u000C反斜線字符u005Cn換行符u000A0空字符u0000r回車符u000Da警鈴符u0007t水平制表符u0009v垂直制表符u000B表表2.2 字符轉(zhuǎn)義符字符轉(zhuǎn)義符字符串常量是用雙引號括起的零個(gè)或多個(gè)字符序列。字符串常量是用雙引號括起的零個(gè)或多個(gè)字符序列。C#支持兩種形式支持兩種形式的字符串常量,一種是常規(guī)字符串,另一種是逐字字符串。的字符串常量,一種是常規(guī)字符串,另一種是逐字字符串。(1)常規(guī)字符串。雙引號括起的一串字符,可以包括轉(zhuǎn)義字符。)常規(guī)字符串。雙引號括起的一串字符,可以包括轉(zhuǎn)義字符。例如:例如:Hello, Worl
32、dnC:windowsMicrosoft / 表示字符串表示字符串 C:windowsMicrosoft(2)逐字字符串。在常規(guī)的字符串前面加一個(gè))逐字字符串。在常規(guī)的字符串前面加一個(gè),就形成了逐字字,就形成了逐字字符串,符串,它的意思是字符串中的每個(gè)字符均表示本意,不使用轉(zhuǎn)義字符它的意思是字符串中的每個(gè)字符均表示本意,不使用轉(zhuǎn)義字符。如果在字符串中需用到雙引號,則可連寫兩個(gè)雙引號來表示一個(gè)雙。如果在字符串中需用到雙引號,則可連寫兩個(gè)雙引號來表示一個(gè)雙引號。引號。例如:例如:C:windowsMicrosoft / 與與 C:windowsMicrosoft 含含義相同義相同He saidHe
33、llo to me / 與與He saidHello to me 含義含義相同相同4字符串常量字符串常量5布爾常量布爾常量它只有兩個(gè)值:它只有兩個(gè)值:true和和false。6符號常量符號常量在聲明語句中,可以聲明一個(gè)標(biāo)識符常量,但必須在在聲明語句中,可以聲明一個(gè)標(biāo)識符常量,但必須在定義標(biāo)識符定義標(biāo)識符時(shí)就進(jìn)行初始化時(shí)就進(jìn)行初始化,并且定義之后就不能再改變該常量的值。,并且定義之后就不能再改變該常量的值。具體的格式為:具體的格式為:const 類型類型 標(biāo)識符標(biāo)識符=初值初值例如:例如:const double PI=3.14159變量是在程序運(yùn)行過程中其值可以改變的量,它是一個(gè)變量是在程序運(yùn)
34、行過程中其值可以改變的量,它是一個(gè)已命名的存已命名的存儲單元儲單元,通常用來記錄運(yùn)算的中間結(jié)果或保存數(shù)據(jù)。在,通常用來記錄運(yùn)算的中間結(jié)果或保存數(shù)據(jù)。在C#中,每中,每個(gè)變量都具有一個(gè)類型,它確定哪些值可以存儲在該變量中。創(chuàng)建個(gè)變量都具有一個(gè)類型,它確定哪些值可以存儲在該變量中。創(chuàng)建一個(gè)變量就是創(chuàng)建這個(gè)類型的實(shí)例,變量的特性由類型來決定。一個(gè)變量就是創(chuàng)建這個(gè)類型的實(shí)例,變量的特性由類型來決定。C#中的變量必須先聲明后使用。中的變量必須先聲明后使用。聲明變量包括變量的名稱、數(shù)據(jù)聲明變量包括變量的名稱、數(shù)據(jù)類型,必要時(shí)指定變量的初始值。類型,必要時(shí)指定變量的初始值。聲明變量的形式:聲明變量的形式:
35、類型類型 標(biāo)識符表標(biāo)識符表;或或 類型類型 標(biāo)識符標(biāo)識符=初值初值 , ;2.2.2 變量變量標(biāo)識符必須以字母或者標(biāo)識符必須以字母或者_(dá)(下劃線)開頭,后面跟字母、數(shù)字和下劃線(下劃線)開頭,后面跟字母、數(shù)字和下劃線的組合。例如,的組合。例如,name、_Int、Name、x_1等都是合法的標(biāo)識符,但等都是合法的標(biāo)識符,但C#是大小寫敏感的語言,是大小寫敏感的語言,name、Name分別代表不同的標(biāo)識符,在定分別代表不同的標(biāo)識符,在定義和使用時(shí)要特別注意。另外變量名不能與義和使用時(shí)要特別注意。另外變量名不能與C#中的關(guān)鍵字相同,除非中的關(guān)鍵字相同,除非標(biāo)識符是以標(biāo)識符是以作為前綴的。作為前綴的
36、。例如:例如: int x ; / 合法合法float y1=0.0, y2 =1.0, y3 ; / 合法,變量說明的同時(shí)可合法,變量說明的同時(shí)可以設(shè)置初始數(shù)值以設(shè)置初始數(shù)值string char / 不合法,因?yàn)椴缓戏?,因?yàn)閏har是關(guān)鍵字是關(guān)鍵字string char / 合法合法C#允許在任何模塊(允許在任何模塊(語法塊語法塊)內(nèi)部聲明變量,模塊開始于)內(nèi)部聲明變量,模塊開始于“”,結(jié)束,結(jié)束于于“”。每次進(jìn)入聲明變量所在的模塊時(shí),則創(chuàng)建變量并分配存儲空。每次進(jìn)入聲明變量所在的模塊時(shí),則創(chuàng)建變量并分配存儲空間,離開這個(gè)模塊時(shí),則銷毀這個(gè)變量并收回分配的存儲空間。實(shí)際間,離開這個(gè)模塊時(shí),
37、則銷毀這個(gè)變量并收回分配的存儲空間。實(shí)際上,變量只在這個(gè)模塊內(nèi)有效,所以稱為局部變量,這個(gè)模塊區(qū)域就上,變量只在這個(gè)模塊內(nèi)有效,所以稱為局部變量,這個(gè)模塊區(qū)域就是變量的作用域。是變量的作用域。表達(dá)式是由表達(dá)式是由操作數(shù)和運(yùn)算符操作數(shù)和運(yùn)算符構(gòu)成的。操作數(shù)可以是常量、變量、屬構(gòu)成的。操作數(shù)可以是常量、變量、屬性等;運(yùn)算符指示對操作數(shù)進(jìn)行什么樣的運(yùn)算。因此,也可以說表性等;運(yùn)算符指示對操作數(shù)進(jìn)行什么樣的運(yùn)算。因此,也可以說表達(dá)式就是利用運(yùn)算符來執(zhí)行某些計(jì)算并且產(chǎn)生計(jì)算結(jié)果的語句。達(dá)式就是利用運(yùn)算符來執(zhí)行某些計(jì)算并且產(chǎn)生計(jì)算結(jié)果的語句。C#提供大量的運(yùn)算符,按需要提供大量的運(yùn)算符,按需要操作數(shù)的數(shù)目
38、操作數(shù)的數(shù)目來分,有一元運(yùn)算符來分,有一元運(yùn)算符(如(如+)、二元運(yùn)算符(如)、二元運(yùn)算符(如+,*)、三元運(yùn)算符(如)、三元運(yùn)算符(如? : )。按運(yùn))。按運(yùn)算功能來分,基本的運(yùn)算符可以分為以下幾類:算功能來分,基本的運(yùn)算符可以分為以下幾類:(1)算術(shù)運(yùn)算符)算術(shù)運(yùn)算符 (2)關(guān)系運(yùn)算符)關(guān)系運(yùn)算符 (3)邏輯運(yùn)算符)邏輯運(yùn)算符 (4)位運(yùn)算符)位運(yùn)算符(5)賦值運(yùn)算符)賦值運(yùn)算符 (6)條件運(yùn)算符)條件運(yùn)算符 (7)其他(分量運(yùn)算符)其他(分量運(yùn)算符 ,下標(biāo)運(yùn)算符,下標(biāo)運(yùn)算符 等)等) 2.3 運(yùn)算符與表達(dá)式運(yùn)算符與表達(dá)式2.3.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符運(yùn)算運(yùn)算 符符含含 義義示例(假設(shè)示
39、例(假設(shè)x,y是某一數(shù)值類型是某一數(shù)值類型的變量)的變量)運(yùn)運(yùn) 算算 符符含含 義義示例(假設(shè)示例(假設(shè)x,y是某一數(shù)值類型是某一數(shù)值類型的變量)的變量)+加x + y ; x+3 ;%取模x % y ; 11%3 ; 11.0 % 3;減x y ; y1 ;+遞增+x ; x+ ;*乘x * y ; 3*4 ; 遞減 x ; x ;/除x / y ; 5/2; 5.0/2.0 ;算術(shù)運(yùn)算符作用的操作數(shù)類型可以是整型也可以是浮點(diǎn)型,運(yùn)算算術(shù)運(yùn)算符作用的操作數(shù)類型可以是整型也可以是浮點(diǎn)型,運(yùn)算符如表符如表2.3所示所示其中:其中: “+ */ ”運(yùn)算與一般代數(shù)意義及其他語言相同,但需要注意:當(dāng)運(yùn)
40、算與一般代數(shù)意義及其他語言相同,但需要注意:當(dāng)“/”作用的兩個(gè)操作數(shù)都是整型數(shù)據(jù)類型時(shí)作用的兩個(gè)操作數(shù)都是整型數(shù)據(jù)類型時(shí),其計(jì)算結(jié)果也是整型,其計(jì)算結(jié)果也是整型。例如:例如:4/2 / 結(jié)果等于結(jié)果等于2 5/2 / 結(jié)果等于結(jié)果等于25/2.0 / 結(jié)果等于結(jié)果等于2.5 “%”取模運(yùn)算取模運(yùn)算,即獲得整數(shù)除法運(yùn)算的余數(shù),所以也稱取余。,即獲得整數(shù)除法運(yùn)算的余數(shù),所以也稱取余。例如:例如: 11%3 / 結(jié)果等于結(jié)果等于212%3 / 結(jié)果等于結(jié)果等于0 11.0%3 / 結(jié)果等于結(jié)果等于2,這與,這與C/C+不同,它也可作用于浮不同,它也可作用于浮點(diǎn)類型的點(diǎn)類型的操作數(shù)操作數(shù) “+”和和“
41、 ”遞增和遞減運(yùn)算符是一元運(yùn)算符,它作遞增和遞減運(yùn)算符是一元運(yùn)算符,它作用的操作數(shù)必須是變量,不能是常量或表達(dá)式。它既可出現(xiàn)用的操作數(shù)必須是變量,不能是常量或表達(dá)式。它既可出現(xiàn)在操作數(shù)之前(前綴運(yùn)算),也可出現(xiàn)在操作數(shù)之后(后綴在操作數(shù)之前(前綴運(yùn)算),也可出現(xiàn)在操作數(shù)之后(后綴運(yùn)算),前綴和后綴有共同之處,也有很大區(qū)別。運(yùn)算),前綴和后綴有共同之處,也有很大區(qū)別。例如:例如:+x +x 先將先將x x加一個(gè)單位,然后再將計(jì)算結(jié)果作為表達(dá)式的值加一個(gè)單位,然后再將計(jì)算結(jié)果作為表達(dá)式的值。x+ x+ 先將先將x x的值作為表達(dá)式的值,然后再將的值作為表達(dá)式的值,然后再將x x加一個(gè)單位。加一個(gè)單
42、位。不管是前綴還是后綴,它們操作的結(jié)果對操作數(shù)而言,都是不管是前綴還是后綴,它們操作的結(jié)果對操作數(shù)而言,都是一樣的,操作數(shù)都加了一個(gè)單位,但它們出現(xiàn)在表達(dá)式運(yùn)算一樣的,操作數(shù)都加了一個(gè)單位,但它們出現(xiàn)在表達(dá)式運(yùn)算中是有區(qū)別的。中是有區(qū)別的。例如:例如: int x , y ;int x , y ;x=5 ; y=+x ; / xx=5 ; y=+x ; / x和和y y的值都等于的值都等于6 6x=5 ; y=x+ ; / xx=5 ; y=x+ ; / x的值是的值是6 6,y y的值是的值是5 5 操作數(shù)操作數(shù) “+”和和“”遞增和遞減運(yùn)算符是一元運(yùn)算符,它作用的操作遞增和遞減運(yùn)算符是一元
43、運(yùn)算符,它作用的操作數(shù)必須是變量,不能是常量或表達(dá)式。它既可出現(xiàn)在操作數(shù)之前(數(shù)必須是變量,不能是常量或表達(dá)式。它既可出現(xiàn)在操作數(shù)之前(前綴運(yùn)算),也可出現(xiàn)在操作數(shù)之后(后綴運(yùn)算),前綴和后綴有前綴運(yùn)算),也可出現(xiàn)在操作數(shù)之后(后綴運(yùn)算),前綴和后綴有共同之處,也有很大區(qū)別。共同之處,也有很大區(qū)別。例如:例如:+x 先將先將x加一個(gè)單位,然后再將計(jì)算結(jié)果作為表達(dá)式的值。加一個(gè)單位,然后再將計(jì)算結(jié)果作為表達(dá)式的值。x+ 先將先將x的值作為表達(dá)式的值,然后再將的值作為表達(dá)式的值,然后再將x加一個(gè)單位。加一個(gè)單位。不管是前綴還是后綴,它們操作的結(jié)果對操作數(shù)而言,都是一樣的不管是前綴還是后綴,它們操作
44、的結(jié)果對操作數(shù)而言,都是一樣的,操作數(shù)都加了一個(gè)單位,但它們出現(xiàn)在表達(dá)式運(yùn)算中是有區(qū)別的,操作數(shù)都加了一個(gè)單位,但它們出現(xiàn)在表達(dá)式運(yùn)算中是有區(qū)別的。例如:例如: int x , y ;x=5 ; y=+x ; / x和和y的值都等于的值都等于6x=5 ; y=x+ ; / x的值是的值是6,y的值是的值是5 2.3.2 關(guān)系運(yùn)算符關(guān)系運(yùn)算符運(yùn)運(yùn) 算算 符符操操 作作結(jié)果(假設(shè)結(jié)果(假設(shè)x,y是某相應(yīng)類型的操作數(shù))是某相應(yīng)類型的操作數(shù))xy如果x大于y,則為true,否則為false=x=y如果x大于等于y,則為true,否則為falsexy如果x小于y,則為true,否則為false=x 、=
45、、 、= flasetrue flase在在C#C#中是沒有意義的。中是沒有意義的。 在在C#中,簡單類型和引用類型都可以通過中,簡單類型和引用類型都可以通過=或或!=來比較它們的數(shù)據(jù)來比較它們的數(shù)據(jù)內(nèi)容是否相等。對簡單類型,比較的是它們的數(shù)據(jù)值;而對引用類型內(nèi)容是否相等。對簡單類型,比較的是它們的數(shù)據(jù)值;而對引用類型來說,由于它的內(nèi)容是對象實(shí)例的引用,所以若相等,則說明這兩個(gè)來說,由于它的內(nèi)容是對象實(shí)例的引用,所以若相等,則說明這兩個(gè)引用指向同一個(gè)對象實(shí)例,如果要測試兩個(gè)引用對象所代表的內(nèi)容是引用指向同一個(gè)對象實(shí)例,如果要測試兩個(gè)引用對象所代表的內(nèi)容是否相等,則通常會(huì)使用對象本身所提供的方法
46、,如否相等,則通常會(huì)使用對象本身所提供的方法,如Equals( )。如果操作數(shù)是如果操作數(shù)是string類型的,則在下列兩種情況下被視為兩個(gè)類型的,則在下列兩種情況下被視為兩個(gè)string值相等。值相等。(1)兩個(gè)值均為)兩個(gè)值均為null。(2)兩個(gè)值都是對字符串實(shí)例的非空引用,這兩個(gè)字符串不僅長度)兩個(gè)值都是對字符串實(shí)例的非空引用,這兩個(gè)字符串不僅長度相同,并且每一個(gè)對應(yīng)的字符位置上的字符也相同。關(guān)系比較運(yùn)算相同,并且每一個(gè)對應(yīng)的字符位置上的字符也相同。關(guān)系比較運(yùn)算“、=、 flase在在C#中是沒有意義的。中是沒有意義的。2.3.3 2.3.3 邏輯運(yùn)算符邏輯運(yùn)算符運(yùn)運(yùn) 算算 符符含含
47、義義運(yùn)運(yùn) 算算 符符含含 義義&邏輯與&短路與|邏輯或|短路或邏輯異或!邏輯非pqp & qp | qp q! ptruetruetruetruefalsefalsetruefalsefalsetruetruefalsefalsetruefalsetruetruetruefalseflaseflasefalsefalsetrue假設(shè)假設(shè)p、q是兩個(gè)布爾類型的操作數(shù),表是兩個(gè)布爾類型的操作數(shù),表2.6給出了邏輯運(yùn)算的真值表。給出了邏輯運(yùn)算的真值表。邏輯運(yùn)算符是用來對兩個(gè)布爾類型的操作數(shù)進(jìn)行邏輯運(yùn)算的,運(yùn)算邏輯運(yùn)算符是用來對兩個(gè)布爾類型的操作數(shù)進(jìn)行邏輯運(yùn)算的,運(yùn)算的結(jié)果也是布爾類型,如表的結(jié)果也是
48、布爾類型,如表2.5所示。所示。運(yùn)算符運(yùn)算符“&”和和“|”的操作結(jié)果與的操作結(jié)果與“&”和和“|”一樣,但它們的一樣,但它們的短路短路特征特征(short cut)使代碼的效率更高。所謂短路就是在邏輯運(yùn)算的過使代碼的效率更高。所謂短路就是在邏輯運(yùn)算的過程中,如果計(jì)算第一個(gè)操作數(shù)時(shí),就能得知運(yùn)算結(jié)果就不會(huì)再計(jì)算程中,如果計(jì)算第一個(gè)操作數(shù)時(shí),就能得知運(yùn)算結(jié)果就不會(huì)再計(jì)算第二個(gè)操作數(shù),如圖第二個(gè)操作數(shù),如圖2.4所示。所示。 位運(yùn)算符主要分為邏輯運(yùn)算位運(yùn)算符主要分為邏輯運(yùn)算和移位運(yùn)算,它的運(yùn)算操作和移位運(yùn)算,它的運(yùn)算操作直接作用于操作數(shù)的每一位直接作用于操作數(shù)的每一位,所以操作數(shù)的類型必須是,所以
49、操作數(shù)的類型必須是整數(shù)類型,不能是布爾類型整數(shù)類型,不能是布爾類型、float或或double等類型。等類型。如表如表2.7所示。借助這些位所示。借助這些位運(yùn)算符可以完成對整型數(shù)的運(yùn)算符可以完成對整型數(shù)的某一位測試、設(shè)置,以及對某一位測試、設(shè)置,以及對一個(gè)數(shù)的位移動(dòng)等操作,這一個(gè)數(shù)的位移動(dòng)等操作,這對許多系統(tǒng)級程序設(shè)計(jì)非常對許多系統(tǒng)級程序設(shè)計(jì)非常重要。重要。 2.3.4 位運(yùn)算符位運(yùn)算符運(yùn)運(yùn) 算算 符符含含 義義&按位與按位與|按位或按位或按位異或按位異或按位取反按位取反右移右移左移左移按位異或運(yùn)算有一個(gè)特別的屬性,假設(shè)有兩個(gè)整型數(shù)按位異或運(yùn)算有一個(gè)特別的屬性,假設(shè)有兩個(gè)整型數(shù)x和和 y,則表
50、,則表達(dá)式達(dá)式 (x y) y值還原為值還原為x,利用這個(gè)屬性可以創(chuàng)建簡單的加密程,利用這個(gè)屬性可以創(chuàng)建簡單的加密程序。例如序。例如using System;class Encode public static void Main( ) char ch1 = O , ch2 = K ; int key = 0 x1f ; Console.WriteLine (明文:明文: + ch1 + ch2 ) ; ch1 = (char) (ch1 key ) ; ch2 = (char) (ch2 key ) ; Console.WriteLine (密文:密文: + ch1 + ch2 ) ; ch
51、1 = (char) (ch1 key ) ; ch2 = (char) (ch2 key ) ; Console.WriteLine (解碼:解碼: + ch1 + ch2 ) ; 移位運(yùn)算符有兩個(gè):移位運(yùn)算符有兩個(gè):一個(gè)左移(一個(gè)左移()。語法形式:語法形式:value num_bits左操作數(shù)左操作數(shù)value是要被移位的值,右操作數(shù)是要被移位的值,右操作數(shù)num_bits是要移位的位是要移位的位數(shù)。數(shù)。(1)左移。將給定的)左移。將給定的value向左移動(dòng)向左移動(dòng)num_bits位,左邊移出的位丟位,左邊移出的位丟掉,右邊空出的位填掉,右邊空出的位填0。例如:例如:0 x1A 2。右移
52、過程如圖。右移過程如圖2.8所示。所示。例如:例如:0 x8AU 2。右移過程如圖。右移過程如圖2.9所示。所示。右移運(yùn)算符的作用相當(dāng)于將右移運(yùn)算符的作用相當(dāng)于將value的值整除以的值整除以num_bits2賦值運(yùn)算符有兩種形式,一種是簡單賦值運(yùn)算符,另一種是復(fù)合賦賦值運(yùn)算符有兩種形式,一種是簡單賦值運(yùn)算符,另一種是復(fù)合賦值運(yùn)算符。值運(yùn)算符。1簡單賦值運(yùn)算符簡單賦值運(yùn)算符語法形式:語法形式:var = exp 2復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符在進(jìn)行如在進(jìn)行如x = x +3 運(yùn)算時(shí),運(yùn)算時(shí),C#提供一種簡化方式提供一種簡化方式x +=3,這就是復(fù),這就是復(fù)合賦值運(yùn)算。合賦值運(yùn)算。語法形式:語法
53、形式:var op= exp / op 表示某一運(yùn)算符表示某一運(yùn)算符等價(jià)的意義是:等價(jià)的意義是: var = var op exp 2.3.5 賦值運(yùn)算符賦值運(yùn)算符 運(yùn)運(yùn) 算算 符符用用 法法 示示 例例等價(jià)表達(dá)等價(jià)表達(dá)式式運(yùn)運(yùn) 算算 符符用用 法法 示示 例例等價(jià)表達(dá)式等價(jià)表達(dá)式+=x += yx = x + y&=x &= yx = x & y =x = yx = x y|=x |= yx = x | y*=x *= yx = x * y=x = yx = x y/=x /= yx = x / y=x = yx = x y%=x %= yx = x % y=x = yx = x y ? x
54、 : y ; / z 的值就是的值就是x,y中較大的一個(gè)值中較大的一個(gè)值 z = x =0 ? x : x ; / z的值就是的值就是x的絕對值的絕對值條件運(yùn)算符條件運(yùn)算符“? :”是是C#中唯一一個(gè)三元運(yùn)算符。中唯一一個(gè)三元運(yùn)算符。2.3.6 條件運(yùn)算符條件運(yùn)算符當(dāng)一個(gè)表達(dá)式含有多個(gè)運(yùn)算符時(shí),當(dāng)一個(gè)表達(dá)式含有多個(gè)運(yùn)算符時(shí),C#編譯器需要知道先做哪個(gè)運(yùn)編譯器需要知道先做哪個(gè)運(yùn)算,這就是所謂的運(yùn)算符的優(yōu)先級,它控制各個(gè)運(yùn)算符的運(yùn)算順序算,這就是所謂的運(yùn)算符的優(yōu)先級,它控制各個(gè)運(yùn)算符的運(yùn)算順序。例如,表達(dá)式例如,表達(dá)式 x+5*2是按是按 x+(5*2)計(jì)算的,因?yàn)橛?jì)算的,因?yàn)椤?”運(yùn)算符比運(yùn)算符
55、比“+”運(yùn)算符優(yōu)先級高。運(yùn)算符優(yōu)先級高。 當(dāng)操作數(shù)出現(xiàn)在具有相同優(yōu)先級的運(yùn)算符之間時(shí),如表達(dá)式當(dāng)操作數(shù)出現(xiàn)在具有相同優(yōu)先級的運(yùn)算符之間時(shí),如表達(dá)式“10 6 2”按從左到右計(jì)算的結(jié)果是按從左到右計(jì)算的結(jié)果是2,如果按從右到左計(jì)算,結(jié),如果按從右到左計(jì)算,結(jié)果是果是6。當(dāng)然。當(dāng)然“ ”運(yùn)算符是按從左到右的次序計(jì)算的,也就是左結(jié)運(yùn)算符是按從左到右的次序計(jì)算的,也就是左結(jié)合。合。 再如表達(dá)式再如表達(dá)式“x=y=2”,它在執(zhí)行時(shí)是按從右到左運(yùn)算的,即先,它在執(zhí)行時(shí)是按從右到左運(yùn)算的,即先將數(shù)值將數(shù)值2賦給變量賦給變量y,再將,再將y的值賦給的值賦給x。所以。所以“=”運(yùn)算符是右結(jié)合運(yùn)算符是右結(jié)合的。的
56、。 在表達(dá)式中,運(yùn)算符的優(yōu)先級和結(jié)合性控制著運(yùn)算的執(zhí)行順序在表達(dá)式中,運(yùn)算符的優(yōu)先級和結(jié)合性控制著運(yùn)算的執(zhí)行順序,也可以用圓括號,也可以用圓括號“()()”顯式地標(biāo)明運(yùn)算順序,如表達(dá)式顯式地標(biāo)明運(yùn)算順序,如表達(dá)式“(x+y)* 2”。2.3.7 運(yùn)算符的運(yùn)算符的優(yōu)先級與結(jié)合性優(yōu)先級與結(jié)合性表表2.9 運(yùn)算符的優(yōu)先級與結(jié)合性運(yùn)算符的優(yōu)先級與結(jié)合性 類類 別別運(yùn)運(yùn) 算算 符符結(jié)結(jié) 合合 性性初等項(xiàng). ( ) new typeof checked unchecked 從左到右一元后綴+ 從右到左一元前綴+ + ! (T) (表達(dá)式)從右到左乘法* / % 從左到右加法+ 從左到右移位從左到右關(guān)系和類
57、型檢測 = is as 從左到右相等= !=從左到右邏輯與&從左到右邏輯異或從左到右邏輯或|從左到右條件與&從左到右條件或|從左到右條件? :從右到左賦值= *= /= %= += = = &= = |=從右到左在表達(dá)式中,操作數(shù)的數(shù)據(jù)類型可以不同,只要相互兼容即可。當(dāng)表達(dá)式中混合了幾種不同的數(shù)據(jù)類型時(shí),C#會(huì)基于運(yùn)算的順序?qū)⑺鼈冏詣?dòng)轉(zhuǎn)換成同一類型。下面是C#的類型提升規(guī)則。(1)一個(gè)操作數(shù)是decimal類型,另一個(gè)操作數(shù)提升為decimal,但float或double類型不能自動(dòng)提升為decimal。(2)一個(gè)操作數(shù)是double類型,另一個(gè)操作數(shù)提升為double。(3)一個(gè)操作數(shù)是fl
58、oat類型,另一個(gè)操作數(shù)提升為float。(4)一個(gè)操作數(shù)是ulong類型,另一個(gè)操作數(shù)提升為ulong,但帶符號數(shù),如sbyte、short、int或long不能自動(dòng)提升。(5)一個(gè)操作數(shù)是long類型,另一個(gè)操作數(shù)提升為long。(6)一個(gè)操作數(shù)是uint類型,另一個(gè)操作數(shù)若是sbyte、short或int,那么這兩個(gè)操作數(shù)都提升為long。(7)一個(gè)操作數(shù)是uint類型,另一個(gè)操作數(shù)提升為uint。(8)除以上情況之外,兩個(gè)數(shù)值類型的操作數(shù)都提升為int類型。 2.3.8 表達(dá)式中的類型轉(zhuǎn)換表達(dá)式中的類型轉(zhuǎn)換 :強(qiáng)制類型的轉(zhuǎn)換形式:(類型)表達(dá)式例如: decimal d1, d2 ;f
59、loat f1;d1 = 99.999; f1 = 0.98;d2 = d1 + f1 ; / 出錯(cuò),因?yàn)閒loat類型的f1不能自動(dòng)轉(zhuǎn)換成decimal類型d2 = d1 + (decimal) f1; 注意:注意:1. 當(dāng)從占用內(nèi)存較多的數(shù)據(jù)類型向占用內(nèi)存較少的數(shù)據(jù)類型做強(qiáng)制轉(zhuǎn)換時(shí),有可能會(huì)發(fā)生數(shù)據(jù)丟失。例如,從long數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換成int類型時(shí),如果long類型的值超過int所能表示的范圍,則會(huì)丟失高位數(shù)據(jù)。2. 雖然char類型屬于整數(shù)類型的一種,但卻不允許直接將一個(gè)整型數(shù)賦給一個(gè)char類型的變量,解決的方法就是用強(qiáng)制類型轉(zhuǎn)換。3. 布爾類型不能進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。任何程序都可以且
60、只能由三種基本流程結(jié)構(gòu)構(gòu)成,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。1.順序結(jié)構(gòu)是三種結(jié)構(gòu)中簡單的一種。即語句按照書寫的順序依次執(zhí)行;2.分支結(jié)構(gòu)又稱為選擇結(jié)構(gòu),它將根據(jù)計(jì)算所得的表達(dá)式的值來判斷應(yīng)選擇執(zhí)行哪一個(gè)流程分支;3.循環(huán)結(jié)構(gòu)則是在一定條件下反復(fù)執(zhí)行一段語句的流程結(jié)構(gòu)。 2.4.1 結(jié)構(gòu)化程序設(shè)計(jì)的三種基本流程圖2.10 程序設(shè)計(jì)的三種控制流程分支語句就是條件判斷語句,它能讓程序在執(zhí)行時(shí)根據(jù)特定條件是否成立而選擇執(zhí)行不同的語句塊。C#提供兩種分支語句結(jié)構(gòu),if語句和switch語句。 2.4.2 分支語句1if語句1. if框架語法形式:if (條件表達(dá)式) 語句;2. if_else框架語法
溫馨提示
- 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)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能交通弱電系統(tǒng)方案
- 環(huán)保工程施工總體布置方案
- 民用建筑施工合同樣本
- 湖南省2024年高考?xì)v史壓軸卷含解析
- 2024-2025學(xué)年新教材高中數(shù)學(xué)第10章概率專題訓(xùn)練含解析新人教A版必修第二冊
- 2024-2025學(xué)年高中歷史第3單元近代西方資本主義政治制度的確立與發(fā)展第8課美國聯(lián)邦政府的建立講義教案新人教版必修1
- 初中語文小心涂改液傷著你閱讀訓(xùn)練及答案
- 2024-2025學(xué)年高中政治第三單元中華文化與民族精神第七課課時(shí)二弘揚(yáng)中華民族精神精煉含解析新人教版必修3
- 2024年雙方權(quán)益確認(rèn)與勞動(dòng)合同質(zhì)押協(xié)議
- 計(jì)算機(jī)圖形學(xué)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 期中試卷(試題)-2024-2025學(xué)年三年級上冊數(shù)學(xué)青島版
- 車隊(duì)車輛掛靠合同模板
- 期中押題卷(試題)-2024-2025學(xué)年數(shù)學(xué)六年級上冊北師大版
- 期中模擬(1-3單元)(試題)-2024-2025學(xué)年六年級上冊數(shù)學(xué)蘇教版
- 期中 (試題) -2024-2025學(xué)年人教PEP版英語四年級上冊
- 點(diǎn)亮文明 課件 2024-2025學(xué)年蘇少版(2024)初中美術(shù)七年級上冊
- 廉政法規(guī)知識測試及答案
- 托育服務(wù)中心項(xiàng)目可行性研究報(bào)告
- 2024內(nèi)蒙古農(nóng)牧業(yè)融資擔(dān)保限公司招聘28人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 5.1 延續(xù)文化血脈 課件-2024-2025學(xué)年統(tǒng)編版道德與法治九年級上冊-2
- 湖北省襄陽市2023-2024學(xué)年六年級上學(xué)期語文期中考試試卷(含答案)
評論
0/150
提交評論