c#基礎知識梳理(二)


上期回顧 - https://www.cnblogs.com/liu-jinxin/p/10818256.html

一、變量

  一個變量只不過是一個供程序操作的存儲區的名字。在 C# 中,每個變量都有一個特定的類型,類型決定了變量的內存大小和布局。范圍內的值可以存儲在內存中,可以對變量進行一系列操作

  (一)、變量的分類

    C# 中提供的基本的值類型大致可以分為以下幾類:

類型 舉例
整數類型 sbyte、byte、short、ushort、int、uint、long、ulong 和 char
浮點型 float 和 double 
十進制類型 decimal
布爾類型 true 或 false 值,指定的值
空類型 可為空值的數據類型

  取值的范圍:(一些變量名稱前面的“u”是unsigned的簡稱,表示該類型存儲的是大於0的整數

類型 別名 范圍
sbyte System.SByte 在-128~127之間的整數 
byte System.Byte 在0~255之間的整數
short System.Int16 在-32768~32767之間的整數
ushort System.UInt16 在0~65535之間的整數
int  System.Int32 在-2147483648~2147483647之間的整數
uint System.UInt32 在0~4294967295之間的整數
long System.Int64  在-9223372036854775808~9223372036854775807之間的整數
ulong System.UInt64  在0~18446744073709551615之間的整數
char System.Char 一個Unicode字符,存儲0~65535之間的整數
bool System.Boolean 布爾值:true或false
float System.Single 32位浮點值 7位小樹,范圍在+-1.5x10-45   ~~~~ +-3.4x10+38
decimal System.Decimal 有符號128位數據,有28到29位有效位,范圍大概在+-1.0x10-28 ~~ +-7.9x10+28
double System.Double 64位浮點值,有15到16位的小樹,范圍在+-5.0X10-324 ~1.7x10+308

  float / decimal / double之間的區別:

  1、float 單精度浮點 32bit,
    double 雙精度浮點64bit,
    decimal是高精度 128bit,浮點型。
  2、float double 是 基本類型(primitive type),decimal不是。
  3、decimal的有效位數很大,達到了28位,但是表示的數據范圍卻比float和double類型小。
  4、常數寫法:
    float f = 12.3F; (帶F)
    double x=12.3; (不帶就是double)
    decimal d = 12.30M; (帶M)

  C# 允許定義其他值類型的變量,比如 enum,也允許定義引用類型變量,比如 class。這些我們將在以后的章節中進行討論。在本章節中,我們只研究基本變量類型

  (二)、變量的定義

    語法:<data_type> <variable_list>;

    代碼示例:

 1 namespace VariableDefinition
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7          /* 聲明 */
 8             int a , b ;
 9             string c ;
10             char d;
11     
12             /* 實際初始化 */
13             a = 10;
14             b = 20;
15             c = "abc";
16             d = 'b';
17             Console.WriteLine("a = {0}, b = {1}, c = {2}, d = {3}", a, b, c,d);
18             Console.ReadLine();
19         }
20     }
21 }
VariableDefinition

 二、常量

  一)、常量類型

    1、整數常量

      整數常量可以是十進制、八進制或十六進制的常量。前綴指定基數:0x 或 0X 表示十六進制,0 表示八進制,沒有前綴則表示十進制。整數常量也可以有后綴,可以是 U 和 L 的組合,其中,U 和 L 分別表示 unsigned 和 long。后綴可以是大寫或者小寫,多個后綴以任意順序進行組合。

    2、浮點常量

      一個浮點常量是由整數部分、小數點、小數部分和指數部分組成。您可以使用小數形式或者指數形式來表示浮點常量。使用小數形式表示時,必須包含小數點、指數或同時包含兩者。使用指數形式表示時,必須包含整數部分、小數部分或同時包含兩者。有符號的指數是用 e 或 E 表示的。

    3、字符串常量

字符串常量是括在雙引號 "" 里,或者是括在 @"" 里。字符串常量包含的字符與字符常量相似,可以是:普通字符、轉義序列和通用字符。使用字符串常量時,可以把一個很長的行拆成多個行,可以使用空格分隔各個部分。

     以下是各種類型的示例:

    

  (二)、常量的定義

    語法:const <data_type> <constant_name> = value;

    代碼示例:

 1 using System;
 2 
 3 public class ConstTest 
 4 {
 5     class SampleClass
 6     {
 7         public int x;
 8         public int y;
 9         public const int c1 = 5;
10         public const int c2 = c1 + 5;
11 
12         public SampleClass(int p1, int p2) 
13         {
14             x = p1; 
15             y = p2;
16         }
17     }
18 
19     static void Main()
20     {
21         SampleClass mC = new SampleClass(11, 22);
22         Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
23         Console.WriteLine("c1 = {0}, c2 = {1}", 
24                           SampleClass.c1, SampleClass.c2);
25     }
26 }
ConstTest

  使用場景:

    1、用於在程序中一旦設定就不被修改的值,例如,圓周率的值。

    2、用於在程序中經常被引用的值,例如,某個錯誤消息在程序中被多處引用,就可以定義為常量。

    3、用於在程序中具有特定意義的值,例如,使用 1 表示登陸狀態 使用0表示離線狀態。

三、運算符

  運算符是一種告訴編譯器執行特定的數學或邏輯操作的符號。C# 有豐富的內置運算符,分類如下:

     算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符及其他運算符。

  (一)、算術運算符

      下表顯示了 C# 支持的所有算術運算符。假設變量 A 的值為 10,變量 B 的值為 20,則:

運算符 描述 實例
+ 把兩個操作數相加 A + B 將得到 30
- 從第一個操作數中減去第二個操作數 A - B 將得到 -10
* 把兩個操作數相乘 A * B 將得到 200
/ 分子除以分母 B / A 將得到 2
% 取模運算符,整除后的余數 B % A 將得到 0
++ 自增運算符,整數值增加 1 A++ 將得到 11
-- 自減運算符,整數值減少 1 A-- 將得到 9

  (二)、關系運算符

    下表顯示了 C# 支持的所有關系運算符。假設變量 A 的值為 10,變量 B 的值為 20,則:

運算符 描述 實例
== 檢查兩個操作數的值是否相等,如果相等則條件為真。 (A == B) 不為真。
!= 檢查兩個操作數的值是否相等,如果不相等則條件為真。 (A != B) 為真。
> 檢查左操作數的值是否大於右操作數的值,如果是則條件為真。 (A > B) 不為真。
< 檢查左操作數的值是否小於右操作數的值,如果是則條件為真。 (A < B) 為真。
>= 檢查左操作數的值是否大於或等於右操作數的值,如果是則條件為真。 (A >= B) 不為真。
<= 檢查左操作數的值是否小於或等於右操作數的值,如果是則條件為真。 (A <= B) 為真。

  (三)、邏輯運算符

    下表顯示了 C# 支持的所有邏輯運算符。假設變量 A 為布爾值 true,變量 B 為布爾值 false,則:

運算符 描述 實例
&& 稱為邏輯與運算符。如果兩個操作數都非零,則條件為真。 (A && B) 為假。
|| 稱為邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為真。 (A || B) 為真。
! 稱為邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件為真則邏輯非運算符將使其為假。 !(A && B) 為真。

  (四)、位運算符

    下表列出了 C# 支持的位運算符。假設變量 A 的值為 60,變量 B 的值為 13,則:

運算符 描述 實例
& 如果同時存在於兩個操作數中,二進制 AND 運算符復制一位到結果中。 (A & B) 將得到 12,即為 0000 1100
| 如果存在於任一操作數中,二進制 OR 運算符復制一位到結果中。 (A | B) 將得到 61,即為 0011 1101
^ 如果存在於其中一個操作數中但不同時存在於兩個操作數中,二進制異或運算符復制一位到結果中。 (A ^ B) 將得到 49,即為 0011 0001
~ 按位取反運算符是一元運算符,具有"翻轉"位效果,即0變成1,1變成0,包括符號位。 (~A ) 將得到 -61,即為 1100 0011,一個有符號二進制數的補碼形式。
<< 二進制左移運算符。左操作數的值向左移動右操作數指定的位數。 A << 2 將得到 240,即為 1111 0000
>> 二進制右移運算符。左操作數的值向右移動右操作數指定的位數。 A >> 2 將得到 15,即為 0000 1111

  (五)、賦值運算符

    下表列出了 C# 支持的賦值運算符:

運算符 描述 實例
= 簡單的賦值運算符,把右邊操作數的值賦給左邊操作數 C = A + B 將把 A + B 的值賦給 C
+= 加且賦值運算符,把右邊操作數加上左邊操作數的結果賦值給左邊操作數 C += A 相當於 C = C + A
-= 減且賦值運算符,把左邊操作數減去右邊操作數的結果賦值給左邊操作數 C -= A 相當於 C = C - A
*= 乘且賦值運算符,把右邊操作數乘以左邊操作數的結果賦值給左邊操作數 C *= A 相當於 C = C * A
/= 除且賦值運算符,把左邊操作數除以右邊操作數的結果賦值給左邊操作數 C /= A 相當於 C = C / A
%= 求模且賦值運算符,求兩個操作數的模賦值給左邊操作數 C %= A 相當於 C = C % A
<<= 左移且賦值運算符 C <<= 2 等同於 C = C << 2
>>= 右移且賦值運算符 C >>= 2 等同於 C = C >> 2
&= 按位與且賦值運算符 C &= 2 等同於 C = C & 2
^= 按位異或且賦值運算符 C ^= 2 等同於 C = C ^ 2
|= 按位或且賦值運算符 C |= 2 等同於 C = C | 2

  (六)、其他運算符

    下表列出了 C# 支持的其他一些重要的運算符,包括 sizeoftypeof 和 ? :

運算符 描述 實例
sizeof() 返回數據類型的大小。 sizeof(int),將返回 4.
typeof() 返回 class 的類型。 typeof(StreamReader);
& 返回變量的地址。 &a; 將得到變量的實際地址。
* 變量的指針。 *a; 將指向一個變量。
? : 條件表達式 如果條件為真 ? 則為 X : 否則為 Y
is 判斷對象是否為某一類型。 If( Ford is Car) // 檢查 Ford 是否是 Car 類的一個對象。
as 強制轉換,即使轉換失敗也不會拋出異常。 Object obj = new StringReader("Hello");
StringReader r = obj as StringReader;

   (七)、優先級

類別  運算符  結合性 
后綴  () [] -> . ++ - -   從左到右 
一元  + - ! ~ ++ - - (type)* & sizeof  從右到左 
乘除  * / %  從左到右 
加減  + -  從左到右 
移位  << >>  從左到右 
關系  < <= > >=  從左到右 
相等  == !=  從左到右 
位與 AND  從左到右 
位異或 XOR  從左到右 
位或 OR  從左到右 
邏輯與 AND  &&  從左到右 
邏輯或 OR  ||  從左到右 
條件  ?:  從右到左 
賦值  = += -= *= /= %=>>= <<= &= ^= |=  從右到左 
逗號  從左到右 

 四、判斷

  判斷結構要求程序員指定一個或多個要評估或測試的條件,以及條件為真時要執行的語句(必需的)和條件為假時要執行的語句(可選的)。

  下面是大多數編程語言中典型的判斷結構的一般形式:

                            C# 中的判斷語句

  (一)、判斷語句

    C# 提供了以下類型的判斷語句。點擊鏈接查看每個語句的細節。

語句 描述
if 語句 一個 if 語句 由一個布爾表達式后跟一個或多個語句組成。
if...else 語句 一個 if 語句 后可跟一個可選的 else 語句,else 語句在布爾表達式為假時執行。
嵌套 if 語句 您可以在一個 if 或 else if 語句內使用另一個 if 或 else if 語句。
switch 語句 一個 switch 語句允許測試一個變量等於多個值時的情況。
嵌套 switch 語句 您可以在一個 switch 語句內使用另一個 switch 語句。

  (二)、三目表達式

    實例如下:

    m = a > b ? a : b;

    表示先判斷a是否大於b,若a>b,則將a的值賦給m,若不符合a>b,則將b的值賦給m

 五、循環

  有的時候,可能需要多次執行同一塊代碼。一般情況下,語句是順序執行的:函數中的第一個語句先執行,接着是第二個語句,依此類推。編程語言提供了允許更為復雜的執行路徑的多種控制結構。

  循環語句允許我們多次執行一個語句或語句組,下面是大多數編程語言中循環語句的一般形式:

                                                         循環結構

  (一)、循環的類型

    C# 提供了以下幾種循環類型。點擊鏈接查看每個類型的細節。

循環類型 描述
while 循環 當給定條件為真時,重復語句或語句組。它會在執行循環主體之前測試條件。
for/foreach 循環 多次執行一個語句序列,簡化管理循環變量的代碼。
do...while 循環 除了它是在循環主體結尾測試條件外,其他與 while 語句類似。至少會執行一次。
嵌套循環 您可以在 while、for 或 do..while 循環內使用一個或多個循環。

  (二)、控制循環的語句

    循環控制語句更改執行的正常序列。當執行離開一個范圍時,所有在該范圍中創建的自動對象都會被銷毀。

    C# 提供了下列的控制語句。點擊鏈接查看每個語句的細節。

控制語句 描述
break 語句 終止 loop 或 switch 語句,程序流將繼續執行緊接着 loop 或 switch 的下一條語句。
continue 語句 引起循環跳過主體的剩余部分,立即重新開始測試條件。

  (三)、無限循環 

 1 using System;
 2 namespace Loops
 3 {
 4     class Program
 5     {
 6         static void Main(string[] args)
 7         {
 8             for (; ; )
 9             {
10                 Console.WriteLine("Hey! I am Trapped");
11             }
12         }
13     }
14 } 

如果條件永遠不為假,則循環將變成無限循環。for 循環在傳統意義上可用於實現無限循環。由於構成循環的三個表達式中任何一個都不是必需的,您可以將某些條件表達式留空來構成一個無限循環。

六:下期預告 - https://www.cnblogs.com/liu-jinxin/p/10826971.html

  -> 方法

  -> 可空類型

  -> 數組

  -> 字符串

  -> 結構體

  -> 枚舉

 參考文獻:

  1、https://www.runoob.com/csharp/csharp-variables.html

  2、http://www.cnblogs.com/sunzhenyong/p/3809433.html

  3、https://www.cnblogs.com/niyl/p/10146114.html

根據w3school自我溫習一下c#基礎,分享給大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM