右邏輯與&左
邏輯異或^左
邏輯或|
左條件與&&左
條件或||左條件
?:右賦值等= *= /= %= += -= <<= >>= &= ^= |=右
左結合意味著運算子是從左到右進行運算的。右結合意味著所有的運算是從右到左進行的,如賦值運算子,要等到其右邊的計算出來之後,才把結果放到左邊的變數中。
2.清單 1-2. 單目運算子: unary.cs
using system;
class unary ", preincrement);
predecrement = --unary;
console.writeline("pre-decrement: ", predecrement);
postdecrement = unary--;
console.writeline("post-decrement: ", postdecrement);
postincrement = unary++;
console.writeline("post-increment: ", postincrement);
console.writeline("final value of unary: ", unary);
positive = -postincrement;
console.writeline("positive: ", positive);
negative = +postincrement;
console.writeline("negative: ", negative);
bitnot = 0;
bitnot = (sbyte)(~bitnot);
console.writeline("bitwise not: ", bitnot);
lognot = false;
lognot = !lognot;
console.writeline("logical not: ", 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 ", result);
result = x-y;
console.writeline("x-y: ", result);
result = x*y;
console.writeline("x*y: ", result);
result = x/y;
console.writeline("x/y: ", result);
floatresult = (float)x/(float)y;
console.writeline("x/y: ", floatresult);
result = x%y;
console.writeline("x%y: ", result);
result += x;
console.writeline("result+=x: ", 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 ;
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]: , myints[1]: , myints[2]: ", myints[0], myints[1], myints[2]);
mybools[0][0] = true;
mybools[0][1] = false;
mybools[1][0] = true;
console.writeline("mybools[0][0]: , mybools[1][0]: ", 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]: , mydoubles[1, 0]: ", mydoubles[0, 0], mydoubles[1, 0]);
mystrings[0] = "joe";
mystrings[1] = "matt";
mystrings[2] = "robert";
console.writeline("mystrings[0]: , mystrings[1]: , mystrings[2]: ", mystrings[0], mystrings[1], mystrings[2]);}}
說明清單 1-4 演示了陣列的各種不同實現方法。第乙個例子是"myints"陣列,它在宣告的同時進行了初始化。
接著是個二維陣列,可以把它理解為陣列的陣列。我們需要使用"new"運算子來例項化初始陣列的大小,之後,再對每個子陣列使用new運算子。
第三個例子是個二維陣列。陣列可以是多維的,每一維可以通過逗號隔開,也必須用"new"運算子進行例項化。
最後定義了乙個一維的字串陣列。
每種情況下,對於資料元素的訪問可以通過引用元素的位置(下標)來進行。陣列的大小可以是任何整型值。其下標從0開始。
小結
到現在為止,你已經了解了c# 的變數,簡單資料型別,陣列和字串。我們還學習了如何用
c#的運算子構成表示式。
第二課 型別和值
lua是一種動態型別語言。沒有型別定義的語法。每個值都攜帶了它自身的型別資訊。8種基礎型別 nil 空 boolean 布林 number 數字 string 字串 userdata 自定義型別 function 函式 thread 執行緒 table 表 函式type可 根據乙個值返回其型別名稱。...
golang語言學習第二課 變數型別及常量與列舉
go語言的變數型別 golang型別轉換是強制的,不能隱式轉換。特別注意 bool型別不能轉化成int,int也不能轉化成bool型別,這個我踩過坑,n天後來補上這條規則。在其他語言裡數字0就代表假,非0就是真,在go語言裡不可以,布林型別就是true 或 false,跟數字一點關係都沒有,這樣設計...
C 基礎學習第二課 變數的初始化
1,背景 1,在c 中,初始化與賦值並不是同乙個概念 2,初始化 建立變數時賦予其乙個初始值 3,賦值 把物件 已經建立 的當前值刪除,而用乙個新值代替 2,列表初始化 作為c 11新標準的一部分,用花括號來初始化變數得到了全面的應用,在此之前,只是在初始化陣列的時候用到 形式 int a int ...