邁克老貓
來自:老貓的理想
本教程參考C#和ASP.NET程序設計教程撰寫,有什么不足之處請大家指出,或在老貓的理想BLOG留言。
這次簡述一下操作符
???? 1.算術操作符
???? ????????算術操作符包括加(+)、減(-)、乘(*)、除(/)和求余(%)。加減操作符除了用于整數和實數的加減運算外,還適用于枚舉類型、字符串類型和委托類型,這是通過操作符重栽實現的。
???? ????????string mf1="Mike";
????????????string mf2="Cat";
????????????string mf3=mf1+mf2;//mf3="MikeCat"
????????
????????????using System;
????????????enum Weekday
????????????{
????????????????Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
????????????};
????????????class MikeCat
????????????{
????????????????static void Main()
????????????????{
????????????????????Weekday mf1=Weekday.Sunday;
????????????????????Weekday mf2=mf1+3;
????????????????????Console.WriteLine("mf1={0},mf2={1}",mf1,mf2);
????????????????}
????????????}//結果:mf1=Sunday,mf2=Wednesday
????????2.賦值操作符
????????????賦值就是給一個變量賦一個新值。c#中分簡單賦值和復合賦值兩類。
????????????????簡單賦值:"=" a=b=c 等價于 a=(b=c)
????????????????復合賦值:"+=" "-=" "*=" "/=" "%=" "|=" "^=" "<<=" ">>=" a+=10 等價于a=a+10
????????3.比較操作符
????????????比較操作符用來比較兩個表達式的大小,如大于(>) < == != <= >= 。
????????4.邏輯操作符
????????????邏輯與(&&) 邏輯或(||) 和 邏輯非(!)
????????5.位操作符是對數據按二進制位進行運算的操作符。c#位操作符包括按位與(&) | ~ << >>
????????????????using System;
????????????????class MikeCat
????????????????{
????????????????????public static void Main()
????????????????????{
????????????????????????int a=6&3;
????????????????????????Console.WriteLine("a={0}",a);
????????????????????????//6的二進制是00000110,3的二進制是00000011,按位與后等于00000010,即2
????????????????????????int b=6|3;
????????????????????????Console.WriteLine("b={0}",b);
????????????????????????//6的二進制是00000110,3的二進制是00000011,按位或后等于00000111,即7
????????????????????????int c=~6;
????????????????????????Console.WriteLine("c={0}",c);
????????????????????????//6的二進制是00000110,按位取反后是11111001即-7
????????????????????????int d=6^3;
????????????????????????Console.WriteLine("d={0}",d);
????????????????????????//6的二進制是00000110,3的二進制是00000011,按位異或后等于00000101,即5
????????????????????????int e=6<<3;
????????????????????????Console.WriteLine("e={0}",e);
????????????????????????//6的二進制是00000110,左移三位后等于00101000,即48
????????????????????????int f=6>>2;
????????????????????????Console.WriteLine("f={0}",f);
????????????????????????//6的二進制是00000110,右移二位等于00000001,即1
????????????????????}
????????????????}
????????6.is操作符
????????????is操作符用于檢查運行時對象類型是否和給定的類型兼容。表達式"e is T"中的e是一個表達式,T是一個類型。返回值是一個布爾值。
????????????如果滿足下列兩個條件,則 is 表達式計算為 true 值:
????????????????expression 非 null。
????????????????expression 可以被轉換為 type。也就是說,將完成形式 (type)(expression) 的轉換表達式而不引發異常。
????????????示例
????????????????// cs_keyword_is.cs
????????????????// The is operator
????????????????using System;
????????????????class Class1
????????????????{
????????????????}
????????????????class Class2
????????????????{
????????????????}
????????????????public class IsTest
????????????????{
???????????????? public static void Test (object o)
???????????????? {
???????????????? Class1 a;
???????????????? Class2 b;
???????????????? if (o is Class1)
???????????????? {
???????????????? Console.WriteLine ("o is Class1");
???????????????? a = (Class1)o;
???????????????? // do something with a
???????????????? }????????
???????????????? else if (o is Class2)
???????????????? {
???????????????? Console.WriteLine ("o is Class2");
???????????????? b = (Class2)o;
???????????????? // do something with b
???????????????? }
???????????????? else
???????????????? {
???????????????? Console.WriteLine ("o is neither Class1 nor Class2.");
???????????????? }
???????????????? }
???????????????? public static void Main()
???????????????? {
???????????????? Class1 c1 = new Class1();
???????????????? Class2 c2 = new Class2();
???????????????? Test (c1);
???????????????? Test (c2);
???????????????? Test ("a string");
???????????????? }
????????????????}
????????????????輸出
????????????????o is Class1
????????????????o is Class2
????????????????o is neither Class1 nor Class2.
????????7.三元操作符
????????????三元操作符(?:)也稱條件操作符。對條件表達式"b?x:y",總是先計算條件b,然后進行判斷。如果b的值為true,則計算x的值,否則計算y的值。條件運算符為右聯運算符,因此該形式的表達式 a ? b : c ? d : e 按如下規則計算:a ? b : (c ? d : e)
????????8. . 運算符
????????????點運算符用于成員訪問。name1 . name2
????????????????????class Simple
????????????????????{
???????????????????? public int a;
???????????????????? public void b()
???????????????????? {
???????????????????? }
????????????????????}
????????????????????Simple s = new Simple();
????????????????????變量 s 有兩個成員 a 和 b;若要訪問這兩個成員,請使用點運算符
????????????????????s.a = 6; // assign to field a;
????????????????????s.b(); // invoke member function b;
9.[] 運算符
????????????方括號 ([]) 用于數組、索引器和屬性,也可用于指針。
????????????type [] array [ indexexpr ]
????????????其中: type 類型。 array 數組。 indexexpr 索引表達式
????????10.() 運算符
????????????除了用于指定表達式中運算符的順序外,圓括號還用于指定轉換(類型轉換)
????????????( type ) expr????其中:type ????expr 要轉換為的類型名。 expr ????一個表達式。轉換顯式調用從 expr 類型到 type 類型的轉換運算符;如果未定義這樣的轉換運算符,則該轉換將失敗。
????????12.自增自減操作符
????????????自增操作符++對變量的值加1,而自減操作符--對變量的值減1。此操作符有前后綴之分。對于前綴操作符,遵循的原則是“先增減,后使用”,而后綴操作符則正好相反,是“先使用,后增減”
????????????using System;
????????????class MikeCat
????????????{
????????????????public static void Main()
????????????????{
????????????????????double x,y;
????????????????????x=1.5;
????????????????????Console.WriteLine(++x);//自增后等于2.5
????????????????????y=1.5;
????????????????????Console.WriteLine(y++);//先顯示1.5后自增
????????????????????Console.WriteLine(y);//自增后等于2.5
????????????????}
????????????}
????????13.as 運算符
????????????as 運算符用于執行可兼容類型之間的轉換。as 運算符用在以下形式的表達式中:expression as type????其中: expression ????引用類型的表達式。type????引用類型。
????????????as 運算符類似于類型轉換,所不同的是,當轉換失敗時,as 運算符將產生空,而不是引發異常。在形式上,這種形式的表達式:
????????????expression as type????等效于:
????????????expression is type ? (type)expression : (type)null
????????????只是 expression 只被計算一次。
????????????請注意,as 運算符只執行引用轉換和裝箱轉換。as 運算符無法執行其他轉換,如用戶定義的轉換,這類轉換應使用 cast 表達式來代替其執行。
????????????using System;
????????????class MyClass1
????????????{
????????????}
????????????class MyClass2
????????????{
????????????}
????????????public class IsTest
????????????{
???????????? public static void Main()
???????????? {
???????????? object [] myObjects = new object[6];
???????????? myObjects[0] = new MyClass1();
???????????? myObjects[1] = new MyClass2();
???????????? myObjects[2] = "hello";
???????????? myObjects[3] = 123;
???????????? myObjects[4] = 123.4;
???????????? myObjects[5] = null;
???????????? for (int i=0; i???????????? {
???????????? string s = myObjects[i] as string;
???????????? Console.Write ("{0}:", i);
???????????? if (s != null)
???????????? Console.WriteLine ( "'" + s + "'" );
???????????? else
???????????? Console.WriteLine ( "not a string" );
???????????? }
???????????? }
????????????}
????????????輸出
????????????0:not a string
????????????1:not a string
????????????2:'hello'
????????????3:not a string
????????????4:not a string
????????????5:not a string
????????14.new 操作符
????????????????new操作符用于創建一個新的類型實例,有三種形式:
????????????????A:對象創建表達式,用于創建一個類類型或值類型的實例。
????????????????B:數組創建表達式,用于創建一個數組類型實例。
????????????????C:委托創建表達式,用于創建一個新的委托類型實例。
????????15.typeof操作符
????????????????typeof操作符用于獲得系統原型對象的類型。
????????????????using System;
????????????????class MikeCat
????????????????{
????????????????????public static void Main()
????????????????????{
????????????????????????Console.WriteLine(typeof(int));
????????????????????????Console.WriteLine(typeof(System.Int32));
????????????????????}
????????????????}//結果:System.Int32 System.Int32
????????????????//表明int和System.Int32是同一個類型
????????????c#中用GetType()方法獲得一個表達式在運行時的類型
????????????????????using System;
????????????????????class MikeCat
????????????????????{
????????????????????????public static void Main()
????????????????????????{
????????????????????????????int r=3;
????????????????????????????Console.WriteLine("圓的面積等于{0}",r*r*Math.PI);
????????????????????????????Console.WriteLine("類型是{0}",(r*r*Math.PI).GetType());
????????????????????????}
????????????????????}//圓的面積等于28.2743338823081
????????????????????//類型是System.Double
????????16.sizeof操作符
????????????????sizeof操作符獲得一個值類型的字節大小
????????????????????????using System;
????????????????????????class MikeCat
????????????????????????{
????????????????????????????unsafe public static void SizesOf()
????????????????????????????{
????????????????????????????????Console.WriteLine("short的大小是{0}",sizeof(short));
????????????????????????????????Console.WriteLine("int的大小是{0}",sizeof(int));
????????????????????????????????Console.WriteLine("long的大小是{0}",sizeof(long));
????????????????????????????}
????????????????????????????public static void Main()
????????????????????????????{
????????????????????????????????SizesOf();
????????????????????????????}
????????????????????????}//short 的大小是2;int的大小是4;long的大小是8;
????????17.checked和unchecked操作符
????????????在進行整型算術運算或從一種整型顯示轉換到另外一種整型時,有可能產生溢出。
????????????檢查這種溢出c#中有兩種處理方式:
????????????第一:在編譯時設置溢出校驗選項(溢出校驗默認是禁用的):
????????????????csc /checked test.cs //這個我們在前面有所介紹
????????????第二:使用checked和unchecked操作符來確定是否進行溢出校驗。即使編譯時禁用溢出校驗,計算時也同樣引發異常。
????????????????using System;
????????????????class MikeCat
????????????????{
????????????????????public static void Main(string[] args)
????????????????????{
????????????????????????long factorial=1;
????????????????????????long num=Int64.Parse(args[0]);
????????????????????????for(long cur=1;cur<=num;cur++)
????????????????????????????{
????????????????????????????????checked{factorial*=cur;}
????????????????????????????}
????????????????????????????Console.WriteLine("{0}的階乘是{1}",num,factorial);
????????????????????}
????????????????}//test.exe 3 3的階乘是6
????????unchecked操作符與checked操作符正好相反,即使溢出,被unchecked操作符所括住的代碼也不會引發異常。
????????各個操作符的優先級我就不在這里多說了。主要是手累。呵呵。仍然和以前c++的優先級相似。詳細可參看MSDN。感謝大家關注本教程,歡迎訪問老貓的理想BLOG。