官术网_书友最值得收藏!

2.2 數(shù)據(jù)類型

高級編程語言大多都有數(shù)據(jù)類型的概念,通過數(shù)據(jù)類型將數(shù)據(jù)進行不同的分類。這些分類中,有用于計算的正整數(shù)、整數(shù)、小數(shù);有文本描述性質(zhì)的字符串、字符;還有將多個有著關(guān)聯(lián)的變量結(jié)合在一起的數(shù)組和集合等。

數(shù)據(jù)類型的使用,規(guī)范了對數(shù)據(jù)的操作。如整數(shù)類型可以進行加、減、乘、除等數(shù)學運算,但字符類型和數(shù)組類型不能直接進行運算。本節(jié)介紹C#中的數(shù)據(jù)類型。

2.2.1 常用數(shù)據(jù)類型

數(shù)據(jù)類型的表面含義是指數(shù)據(jù)屬于哪種類型,在實際操作中要根據(jù)數(shù)據(jù)特性以及范圍選擇一個適合的數(shù)據(jù)類型。

每一種不同的數(shù)據(jù)類型都有不同的表示方式和應用,如一些數(shù)據(jù)類型需要使用引號,另一些數(shù)據(jù)類型需要使用大括號。常用的數(shù)據(jù)類型有整型、浮點型、字符型、字符串類型、數(shù)組類型、類、接口和委托等,根據(jù)其用法的不同將數(shù)據(jù)類型分為值類型和引用類型,如下所示。

(1)值類型。值類型直接訪問變量數(shù)據(jù)的值,如果向一個變量分配值類型,則該變量將被賦予全新的值副本。值類型通常創(chuàng)建在方法的棧上。

(2)引用類型。引用類型直接操作的是數(shù)據(jù)的存儲位置,如果為某一個變量分配一個引用類型,則該變量將引用原始值,不會創(chuàng)建任何副本。引用類型的創(chuàng)建一般在方法的堆上,它主要包含類、接口、數(shù)組、字符串和委托。

對上述常用的數(shù)據(jù)類型介紹如下。

1.整型

整型類型的數(shù)據(jù)相當于數(shù)學中的整數(shù),但C#中的整型有著一定的范圍。最常用的整型是int型,數(shù)據(jù)值是從-2147483648到2147483647之間的整數(shù),除此之外還有短整型和長整型等,如表2-1所示。

表2-1 整型類型名稱及說明

整型通常表示的是十進制數(shù)據(jù)。而計算機中,數(shù)據(jù)的存儲使用的是二進制數(shù)據(jù),因此在一些情況下,需要有十進制、二進制、八進制和十六進制數(shù)據(jù)間的轉(zhuǎn)化。

2.浮點型

浮點型通常用來表示帶小數(shù)點的數(shù),其用法與整型的用法一樣。浮點數(shù)可根據(jù)數(shù)據(jù)的精度分為單精度的float類型和雙精度的double類型,如下所示。

(1)float表示占位32位的數(shù),其取值范圍在1.5×10-45~3.4×1038之間。

(2)double表示占位64位的數(shù),其取值范圍在5.0×10-324~1.7×10308之間。

整型數(shù)據(jù)和浮點型數(shù)據(jù)均可參與數(shù)學邏輯運算,常用的運算有加法、減法、乘法、除法和取余運算等。

3.字符型

字符型表示的是單個字符,需要注意的是:字符型數(shù)據(jù)需要使用單引號引用,如小寫字母a,若用來表示字符,則需要寫作'a',單引號內(nèi)只能有一個字符,否則將引發(fā)錯誤。

字符型使用char來表示,該類型占位16位,可以是字符集中的任意字符。但數(shù)字被定義為字符型之后就不能參與數(shù)值運算了。如'5'與5是完全不同的概念:5可以參與數(shù)學邏輯運算,可以使用兩個5相加得到整型數(shù)據(jù)10;而'5'只能被作為字符使用,不能參與邏輯運算。

4.數(shù)組

數(shù)組描述的是一組有著序號的數(shù)據(jù)。如一周的7天,這7天屬于7個不同的數(shù)據(jù),但它們又有著密切的聯(lián)系、有著固定的順序。C#使用數(shù)組來定義多個相關(guān)聯(lián)的數(shù)據(jù),并為這些數(shù)據(jù)定義下標,描述這些數(shù)據(jù)的順序。

下標可理解為這組數(shù)據(jù)中每個數(shù)據(jù)的編號,下標為從0開始的正整數(shù),如數(shù)組名稱為num,則num[0]表示該數(shù)組中的第一個數(shù)據(jù)。數(shù)組類型屬于引用類型,對數(shù)組成員的訪問,其實質(zhì)是通過下標記錄每個成員的存儲地址。

5.字符串

字符串類型相當于字符類型(int型、char型、float型等)的數(shù)組,但它沒有明確的下標。字符串類型同樣是引用類型,對字符串的訪問與對數(shù)組的訪問一樣,但其用法相當于一個值類型數(shù)據(jù)。

字符串類型數(shù)據(jù)需要使用雙引號引用,如一個字符串內(nèi)容為:歡迎光臨,則需要表示為“歡迎光臨”。字符串類型數(shù)據(jù)使用廣泛,可被作為類的對象來處理,其用法在本書后面的章節(jié)中介紹。

6.轉(zhuǎn)義字符

在C#中有一種特殊的字符,稱為轉(zhuǎn)義字符,通常在字符串中使用,表示特殊的輸出或顯示方式。

轉(zhuǎn)義字符是被賦予特殊意義的特殊字符,轉(zhuǎn)義字符的使用通常不需要單引號,而是放在字符串內(nèi)部使用。

使用轉(zhuǎn)義字符,可以表達換行、換頁和制表符等特殊含義,常見的轉(zhuǎn)義字符如表2-2所示。

表2-2 常用的轉(zhuǎn)義字符

在C#中有輸出語句可以在控制臺輸出一條語句,其輸出的語句即為字符串類型的數(shù)據(jù)。將轉(zhuǎn)義字符放在字符串中輸出,可顯示轉(zhuǎn)義字符的作用和效果。

7.結(jié)構(gòu)

結(jié)構(gòu)類型不是單個數(shù)據(jù)的類型,而是多種數(shù)據(jù)和多種數(shù)據(jù)類型的組合。結(jié)構(gòu)將相關(guān)聯(lián)的數(shù)據(jù)結(jié)合在一起,如一個結(jié)構(gòu)名稱為學生,則該結(jié)構(gòu)下可以有整型的變量學生編號,以及浮點型的學生身高等數(shù)據(jù),這些數(shù)據(jù)都是與學生相關(guān)的信息。

8.枚舉

枚舉類型同樣不是單個數(shù)據(jù)的類型,但它與結(jié)構(gòu)不同,枚舉類型中的所有數(shù)據(jù),其數(shù)據(jù)類型是統(tǒng)一的。

枚舉類型是一種數(shù)據(jù)的列舉,如商品的分類有多種,不同的人可能對同一種商品類型有不同的叫法(家電也可以叫作家用電器),此時只需讓權(quán)威人士將所有的商品類型列舉出來,由其他人從中選擇,即可統(tǒng)一商品的分類名稱,避免商品分類的混雜。

通??梢允褂妹杜e的數(shù)據(jù)有:一年四季、12個月份、一個公司的部門和新聞類型等。

9.其他數(shù)據(jù)類型

本節(jié)所介紹的數(shù)據(jù)類型還有類、接口和委托,這些數(shù)據(jù)類型將在本書后面的章節(jié)中詳細介紹,本節(jié)對其概括如下。

(1)類是抽象的概念,確定對象擁有的特征(屬性)和行為(方法)。它可以包含字段、方法、索引器和構(gòu)造方法等。

(2)接口是一種約束形式,它只包括成員的定義,而不包含成員實現(xiàn)的內(nèi)容。接口的主要目的是為不相關(guān)的類提供通用的處理服務,由于C#中只允許樹形結(jié)構(gòu)中的單繼承,即一個類只能繼承一個父類,所以接口是讓一個類具有兩個以上基類的唯一方式。

(3)委托是一個類,它定義了方法的類型,使得方法可以當作另一個方法的參數(shù)來進行傳遞。

2.2.2 數(shù)據(jù)格式

常用的數(shù)據(jù)格式有數(shù)據(jù)的進制和字符串的顯示格式。日常生活中的數(shù)據(jù)進制是十進制,即以10為基數(shù),超過10就進位。然而計算機中的數(shù)據(jù)是兩位的,即0和1,是二進制數(shù)據(jù)。

字符串通常是程序中的描述性文本,需要直接與用戶接觸,其顯示樣式?jīng)Q定了程序與用戶交互的質(zhì)量。C#中提供了多種方式來顯示字符串。本節(jié)介紹數(shù)據(jù)進制的字符串格式顯示。

1.數(shù)據(jù)進制

二進制數(shù)據(jù)由0和1這兩個數(shù)字構(gòu)成,十進制中的數(shù)字3被轉(zhuǎn)化成二進制表示為11,滿二進一。因此,十進制中的4等同于二進制中的100。

同樣道理,十六進制由16個數(shù)字構(gòu)成,滿十六進一。由于數(shù)字只有0~9這10個,不足以表示十六進制所需的16個,因此需要使用大寫字母A~F來表示。

表示十六進制的數(shù)字為:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。十六進制中的F相當于十進制中的15;十六進制10相當于十進制數(shù)字16。

對于十進制數(shù)據(jù),從低位到高位分別表示個、十、百、千等,依次表示為100、101、102、103;對于二進制數(shù)據(jù),從低位到高位依次為20、21、22、23和24等;十六進制數(shù)據(jù)從低位到高位依次為160、161、162、163等。

因此對于二進制數(shù)據(jù)11001來說,轉(zhuǎn)換為十進制數(shù)據(jù)為:1×1+0×2+0×4+1×8+1×16=25。十六進制數(shù)據(jù)AAA轉(zhuǎn)化為十進制為:10×1+10×16+10×256=2730。

2.字符串格式

對字符串格式的控制可以使用格式標識符、使用@符號或使用格式控制方法。在C#中,使用Console.WriteLine()方法和string.Format()方法都可以控制字符串的格式,不同的是:Console.WriteLine()方法是一個輸出方法,在控制字符串格式的同時,將字符串輸出;而string.Format()方法能夠?qū)⒏袷交蟮臄?shù)據(jù)放在變量中,隨時可以調(diào)用。

1)使用Console.WriteLine()方法及格式標識符

為了規(guī)范輸出數(shù)據(jù),Console.WriteLine()方法可直接對字符串的格式進行規(guī)范,其中一種規(guī)范格式如下所示:

    Console.WriteLine("{0} {1}",參數(shù)1,參數(shù)2,…)

上述代碼中,{0}代表第一個參數(shù),{1}代表第二個參數(shù)。Console.WriteLine()方法可包含多個參數(shù),使用大括號和數(shù)字來表示。其內(nèi)部數(shù)字從0開始,相同的編號只能代表相同的參數(shù)。如輸出2+3的計算結(jié)果,可使用如下語句:

    Console.WriteLine("2+3={0}",2+3);

上述代碼中,使用2+3的計算結(jié)果替代字符串中的“{0}”;輸出字符串“2+3=”和2+3的計算結(jié)果。在C#中有著可以直接使用的運算符,“+”運算符是其中的一種。程序設(shè)計語言中的運算符與數(shù)學中的運算符略有不同,將在2.5節(jié)介紹。

在C#中提供了格式標識符號,用來規(guī)范字符串的輸出格式。常見的格式標識符號如表2-3所示。

表2-3 格式標識符號及其含義

如分別使用逗號分隔符號和精度格式,輸出同一個數(shù)據(jù)01234,使用語句如下所示。

    Console.WriteLine("{0:N1}", 01234);
    Console.WriteLine("{0:N2}", 01234);
    Console.WriteLine("{0:N3}", 01234);
    Console.WriteLine("{0:F1}", 01234);
    Console.WriteLine("{0}", "01234");

運行上述語句,其效果如下所示。若Console.WriteLine()方法中有兩個參數(shù),都需要雙精度表示,則可以使用“Console.WriteLine("{0:F2}{1:F2}", 1234, 5678);”語句。

    1,234.0
    1,234.00
    1,234.000
    1234.0
    01234

在C#中,有Console.Write()方法,其用法與Console.WriteLine()方法只有一點不同:Console.WriteLine()方法在輸出的同時,在輸出內(nèi)容的末尾添加換行符,而Console.Write()方法只輸出指定的內(nèi)容,不對文字進行換行。

2)string.Format()方法

在C#中,有不需要輸出而只指定字符串格式的方法:string.Format()方法。該方法根據(jù)指定的格式,返回一個格式字符串,其格式的使用與Console.WriteLine()方法一樣。如同樣是2+3的計算結(jié)果,使用string.Format()方法語句如下。

    string.Format ("2+3={0}",2+3);

輸出該字符串,語句如下。

    Console.WriteLine(string.Format ("2+3={0}",2+3));

3)@的使用

在C#中,一些特殊符號被賦予了特殊的用法,但字符串中的特殊符號并不希望被用作特殊的用法,而是希望被作為普通字符輸出,此時可以使用@符號,將字符串原樣輸出。

主站蜘蛛池模板: 繁峙县| 璧山县| 三穗县| 宣汉县| 西乌珠穆沁旗| 灵武市| 如东县| 阿合奇县| 星子县| 崇文区| 瓦房店市| 社旗县| 西城区| 雅江县| 安国市| 黔南| 浦县| 镇平县| 九龙坡区| 沂源县| 密山市| 花莲市| 威远县| 藁城市| 上蔡县| 衢州市| 阜阳市| 河津市| 宁乡县| 桑植县| 固阳县| 义马市| 曲周县| 亳州市| 南开区| 巫山县| 崇文区| 平陆县| 南丹县| 湖南省| 朝阳县|