App下載

C# 編程語言學(xué)習(xí)系列(四)

販賣月光的小女孩 2021-12-09 11:32:32 瀏覽數(shù) (2476)
反饋

上一篇文章中,學(xué)習(xí)記錄了 C# 語言中常量和各類運算符的內(nèi)容。在涉及運算符的時候,還提到了相關(guān)數(shù)據(jù)類型轉(zhuǎn)換,今天這篇文章來詳細學(xué)習(xí)一下關(guān)于 C# 語言中數(shù)據(jù)類型的轉(zhuǎn)換。

一、類型轉(zhuǎn)換

在第二天的學(xué)習(xí)中,已經(jīng)學(xué)習(xí)了C# 語言中的基礎(chǔ)數(shù)據(jù)類型,如整數(shù)類型 int、浮點數(shù)類型 float、布爾類型 bool 以及字符類型 char 等等。這時候有一些疑問了。如果整數(shù)和浮點數(shù)相加,那么結(jié)果返回的是整數(shù)還是浮點數(shù)類型?數(shù)字類型的值可以和字符類型進行算術(shù)操作嗎?布爾值和其他類型操作的結(jié)果是什么?

解答這些疑問,就需要對數(shù)據(jù)類型轉(zhuǎn)換有所了解。

1、轉(zhuǎn)換形式

在 C# 數(shù)據(jù)類型的形式也是分為兩種:

(1)隱式類型轉(zhuǎn)換 - 這是一個 C# 默認的以安全的形式進行的轉(zhuǎn)換。例如:從小的數(shù)類型到大的整數(shù)類型,從派生類到基類。

int i = 3;
long l = i; // l = 3

(2)顯示類型轉(zhuǎn)換 - 就是強制類型轉(zhuǎn)換,需要強制轉(zhuǎn)換運算符。使用顯式轉(zhuǎn)換,可能會造成數(shù)據(jù)缺失。

int i = 1000000;
short s = (short)i; // s = 16960

2、不同類型的轉(zhuǎn)換

接下來就看一看不同的數(shù)據(jù)類型之間哪些需要顯示轉(zhuǎn)換,而哪些又屬于是隱式轉(zhuǎn)換。

(1)浮點數(shù)和整數(shù)類型

int a = 3;
float b = 2.3f;


int c = a + (int)b; // c = 5
float d = a + b; // d = 5.3

整數(shù)類型可以被默認隱式轉(zhuǎn)換為浮點數(shù),而浮點數(shù)如果想要轉(zhuǎn)換為整數(shù),則需要使用整數(shù)類型的強轉(zhuǎn)運算符。

浮點數(shù)強轉(zhuǎn)為整數(shù)類型之后,只保留了整數(shù)部分,小數(shù)部分的數(shù)值丟失。

(2)字符和整數(shù)類型

char a = 'A';
int x = c; // x = 65


int b = 49;
char y = (char)b; // y = '1'

字符類型的值可以被隱式轉(zhuǎn)換為整數(shù)類型,而整數(shù)類型想要轉(zhuǎn)換為字符類型,則需要 char 強轉(zhuǎn)。

字符之所以能和整數(shù)類型進行轉(zhuǎn)換,這是因為 ASCII 或者 Unicode 等編碼表,每個字符對應(yīng)的就是一個數(shù)字。然而這些數(shù)字對于計算機而言,就是一串的二進制。雖然在我們看來是數(shù)字和文字,區(qū)別很大,但對于計算機而言它們都只是二進制的數(shù)字而已。

(3)布爾類型

bool n;
int a = 1;
n = (bool)a; // 錯誤
float b = 2.3f;
n = (bool)b; // 錯誤
char c = '0';
n = (bool)c; // 錯誤

布爾類型不能夠直接和其他類型隱式轉(zhuǎn)換,也不能直接使用類型強轉(zhuǎn)運算符來進行強制轉(zhuǎn)換。

想要轉(zhuǎn)換為布爾類型,就需要引入 C# 內(nèi)置的一些數(shù)據(jù)類型轉(zhuǎn)換方法。

3、類型轉(zhuǎn)換方法

(1) Convert.ToBoolean(param)

bool b;
string str = 'false';
b = Convert.ToBoolean(str); // b = False
int num = 1;
b = Convert.ToBoolean(num); // b = True
float ff = 3.24f;
b = Convert.ToBoolean(ff); // b = True

(2) Convert.ToInt32(param)

int i;
char word = '1';
i = Convert.ToInt32(word); // i = 49
string num = "321";
i = Convert.ToInt32(num); // i = 321
bool boo = true;
i = Convert.ToInt32(num); // i = 1

轉(zhuǎn)換整數(shù)類型的方法有 ToInt16 相當(dāng)于 short 類型;ToInt32 相當(dāng)于 Int 類型,也是程序中最常使用的;ToInt64 相當(dāng)于 Long 類型。

這個方法通常是應(yīng)用在,當(dāng)接收用戶輸入數(shù)值的時候,轉(zhuǎn)換為整數(shù)類型。

(3) ToString()

string str;
int num = 3234;
str = num.ToString(); // str = "3234"
bool boo = false;
str = boo.ToString(); // str = "false"
float foo = 32.43f;
str = foo.ToString(); // str = "32.43"

Convert.ToString(param)ToString() 兩個方法的作用是差不多的,后者是屬于 Object 的擴展方法,因此所有類型都會有 ToString() 這個方法。前者里面的參數(shù),可以使各種類型的基礎(chǔ)數(shù)據(jù)類型,或者 Object 類對象。

一般情況,上面這兩個方法都是可以通用的。但是當(dāng)返回的數(shù)據(jù)類型中可能出現(xiàn) null 值的情況,調(diào)用了 ToString 方法,就會返回 NullReferenceException。而 Convert.ToString 不會拋出異常,而是返回一個空字符串。

(4) 其他轉(zhuǎn)換方法

Convert.ToUint32 - 轉(zhuǎn)換為無符號的整數(shù)類型。和 Convert.ToInt32 很相似,一樣都有16位和64位。

Convert.ToDecimal - 將浮點數(shù)或者整數(shù)轉(zhuǎn)換為 Decimal 十進制類型。

Convert.Double - 轉(zhuǎn)為 Double 雙精度浮點數(shù)類型。 ...

二、總結(jié)

關(guān)于 C# 一些簡單的數(shù)據(jù)類型轉(zhuǎn)換的內(nèi)容就記錄到這了。

至于其他更深層次的內(nèi)容,就留到后面學(xué)習(xí)到了,再接著進行延伸擴展。

C#

0 人點贊