C 教程第二課 表示式,型別和變數

2021-04-13 22:13:10 字數 4473 閱讀 7451

右邏輯與&左

邏輯異或^左

邏輯或|

左條件與&&左

條件或||左條件

?:右賦值等= *= /= %= += -= <<= >>= &= ^= |=右

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

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 ...