C#的運算式,類型和變數

來源:互聯網
上載者:User
"變數"僅僅是資料的儲存位置。你可以把資料存放到其中,或者從中取出來作為C#運算式的一部分。變數中所存放的資料的含義是通過類型來控制的。

C#是個強型別(???)的語言。這樣,一切對變數的操作都是針對該變數的類型而進行的。為了保證變數中所存放資料的合法性和一致性,對不同類型的變數進行操作有相應的規則。

C#語言的簡單類型包含布爾類型和三種數實值型別:整型,浮點型和小數。

1.清單1-1 顯示布爾值:Boolean.cs

using System;
class Booleans {
public static void Main() {
bool content = true;
bool noContent = false;
Console.WriteLine("It is {0} that C# Station provides C# programming language content.", content);
Console.WriteLine("The statement above is not {0}.", noContent);
}
}

說明

1.在清單1-1中,布爾值作為句子的一部分輸出到控制台中。"bool"類型的取值要麼為真,要麼為假。程式運行結果如下:

>It is True that C# Station provides C# programming language content.
>The statement above is not False.

2.下列表格顯示了各種整數類型,所佔位元組大小和所能表示的數的範圍。

類型 範圍
sbyte 8 -128 to 127
byte 8 0 to 255
short 16 -32768 to 32767
ushort 16 0 to 65535
int 32 -2147483648 to 2147483647
uint 32 0 to 4294967295
long 64 -9223372036854775808 to 9223372036854775807
ulong 64 0 to 18446744073709551615
char 16 0 to 65535

在對整數進行計算時,除了字元類型之外,上述這些類型都是適合的。字元類型代表一個Unicode字元。正如在上表中可以看到的,你可以從中選擇適合你需要的類型。

3.下列表格顯示了單精確度類型,雙精確度類型和小數類型的資料,它們所佔的位元組,精度和所能表示的數的範圍。

類型 精度 範圍
float 32 7 digits 1.5 x 10-45 to 3.4 x 1038
double 64 15-16 digits 5.0 x 10-324 to 1.7 x 10308
decimal 128 28-29 decimal places 1.0 x 10-28 to 7.9 x 1028

當你需要進行涉及到分數的操作時,就需要用到實型,然而,對於金融財經方面的資料的計算,小數類型也許是你最好的選擇。

4.運算式計算之後可以得出結果。這些運算式把變數和運算子一同放到語句中。下表列出了C#允許的運算子,優先順序和結合性。

分類 運算子 結合性
初級 (x) x.y f(x) a[x] x++ x-- new typeof sizeof checked unchecked
單目 + - ! ~ ++x --x (T)x
乘法等 * / %
加法等 + -
移位 << >>
關係 < > <= >= is
相等 == !=
邏輯與 &
邏輯異或 ^
邏輯或 |
條件與 &&
條件或 ||
條件 ?:
賦值等 = *= /= %= += -= <<= >>= &= ^= |=

左結合意味著運算子是從左至右進行運算的。右結合意味著所有的運算是從右至左進行的,如賦值運算子,要等到其右邊的計算出來之後,才把結果放到左邊的變數中。

2.清單 1-2. 單目運算子: Unary.cs

using System;
class Unary {
public static void Main() {
int unary = 0;
int preIncrement;
int preDecrement;
int postIncrement;
int postDecrement;
int positive;
int negative;
sbyte bitNot;
bool logNot;
preIncrement = ++unary;
Console.WriteLine("Pre-Increment: {0}", preIncrement);
preDecrement = --unary;
Console.WriteLine("Pre-Decrement: {0}", preDecrement);
postDecrement = unary--;
Console.WriteLine("Post-Decrement: {0}", postDecrement);
postIncrement = unary++;
Console.WriteLine("Post-Increment: {0}", postIncrement);
Console.WriteLine("Final Value of Unary: {0}", unary);
positive = -postIncrement;
Console.WriteLine("Positive: {0}", positive);
negative = +postIncrement;
Console.WriteLine("Negative: {0}", negative);
bitNot = 0;
bitNot = (sbyte)(~bitNot);
Console.WriteLine("Bitwise Not: {0}", bitNot);
logNot = false;
logNot = !logNot;
Console.WriteLine("Logical Not: {0}", logNot);
}
}

說明

1.當計算運算式的時候,在後置增一和後置減一運算子進行運算時,先返回其值,再進行增一或者減一運算。當使用前置加號和減號運算子進行運算時,是先進行增一或者減一的運算,然後再返回其結果值。

2.在清單1-2中, 變數unary初始化為0,進行++x 運算時,"unary"的值加1,再把其值1賦給"preIncrement"變數。在進行--x運算時,先把"unary"的值減到0, 再把值0賦給"preDecrement"變數。

3.進行x-運算時,先把"unary"的值0賦給"postDecrement" 變數,之後再把"unary"減到-1。進行x++運算時,先把"unary"的值-1賦給"postIncrement"變數,之後再對"unary"加1,使得"unary"變數現在的值為0。

4.變數"bitNot"初始值為0,進行按位取反運算,本例中,數0表示為二進位"00000000",按位取反之後變為-1,其二進位表示為"11111111"。

5.瞭解一下運算式"(sbyte)(~bitNot)", 任何對類型sbyte, byte, short 或者 ushort 類型資料的運算,返回結果都是整數。要把值賦給bitNot變數,我們必須使用cast (類型)運算子(強制類型轉換),其中Type表示你希望轉換成的類型(本例中為sbyte)。 Cast運算子把大範圍類型的資料轉換為小範圍類型的資料時,須特別謹慎,因為此時有遺失資料的危險。一般來說,把小類型的資料賦給大類型變數,並沒有問題, 因為大範圍資料類型的變數具有足夠的空間存放小類型資料。 注意在signed 和unsigned類型之間進行Cast運算時,也存在此類危險。 許多初級程式設計教程對變數的位表示作出了很好的講解,同時也介紹了直接進行Cast運算的危險。

邏輯非(!)運算子可以處理布爾變數值。本例中,"logNot"變數從false 變為true。

上述程式的輸出結果如下:

>Pre-Increment: 1
>Pre-Decrement 0
>Post-Decrement: 0
>Post-Increment -1
>Final Value of Unary: 0
>Positive: 1
>Netative: -1
>Bitwise Not: -1
>Logical Not: True

3.清單 1-3. 二元運算子 Binary.cs

using System;
class Binary {
public static void Main() {
int x, y, result;
float floatResult;
x = 7;
y = 5;
result = x+y;
Console.WriteLine("x+y: {0}", result);
result = x-y;
Console.WriteLine("x-y: {0}", result);
result = x*y;
Console.WriteLine("x*y: {0}", result);
result = x/y;
Console.WriteLine("x/y: {0}", result);
floatResult = (float)x/(float)y;
Console.WriteLine("x/y: {0}", floatResult);
result = x%y;
Console.WriteLine("x%y: {0}", result);
result += x;
Console.WriteLine("result+=x: {0}", result);
}
}

說明

清單1-3 示範了二元操作符的幾個例子。加法(+),減法(-),乘法(*)和除法(/)的運算結果,就是我們通常進行的的四則運算的結果。

因為"floatResult"變數是浮點運算類型,所以整型變數"x"和"y" 被強制轉換成浮點類型來計算FloatResult。

這裡有個求餘數的運算子,兩個運算元相除,返回餘數。

最後一條語句給出了另外一種賦值形式,這裡用了(+=)運算子.無論什麼時候你使用(+=)運算子,那麼這個二進位運算子就應該在運算子左右兩邊都進行運算,然後把值賦給左邊的參數。本語句相當於"result = result + x",並返回同樣的值。

前面的課程中,你看到的使用次數較多的一種類型是"string" (字串)類型。"string"類型是由包含在引號內的Unicode編碼的字元構成。例如"This is a string."

另外一種資料類型是數組。數組可以看成是同種類型的元素構成的集合。當聲明數組時,你要指定類型名,數組名,維數和數組大小。

4.清單 1-4. Array Operations: Array.cs

using System;
class Array {
public static void Main() {
int[] myInts = { 5, 10, 15 };
bool[][] myBools = new bool[2][];
myBools[0] = new bool[2];
myBools[1] = new bool[1];
double[,] myDoubles = new double[2, 2];
string[] myStrings = new string[3];
Console.WriteLine("myInts[0]: {0}, myInts[1]: {1}, myInts[2]: {2}", myInts[0], myInts[1], myInts[2]);
myBools[0][0] = true;
myBools[0][1] = false;
myBools[1][0] = true;

Console.WriteLine("myBools[0][0]: {0}, myBools[1][0]: {1}", myBools[0][0], myBools[1][0]);
myDoubles[0, 0] = 3.147;
myDoubles[0, 1] = 7.157;
myDoubles[1, 1] = 2.117;
myDoubles[1, 0] = 56.00138917;
Console.WriteLine("myDoubles[0, 0]: {0}, myDoubles[1, 0]: {1}", myDoubles[0, 0], myDoubles[1, 0]);
myStrings[0] = "Joe";
myStrings[1] = "Matt";
myStrings[2] = "Robert";
Console.WriteLine("myStrings[0]: {0}, myStrings[1]: {1}, myStrings[2]: {2}", myStrings[0], myStrings[1], myStrings[2]);
}
}

說明

清單 1-4 示範了數組的各種不同實現方法。第一個例子是"myInts"數組,它在聲明的同時進行了初始化。

接著是個二維數組,可以把它理解為數組的數組。我們需要使用"new"運算子來執行個體化初始數組的大小,之後,再對每個子數組使用new運算子。

第三個例子是個二維數組。數組可以是多維的,每一維可以通過逗號隔開,也必須用"new"運算子進行執行個體化。

最後定義了一個一維的字串數組。

每種情況下,對於資料元素的訪問可以通過引用元素的位置(下標)來進行。數組的大小可以是任何整型值。其下標從0開始。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.