逻辑与

&

逻辑异或

^(相同为0不同为1)

逻辑或

|

条件与

&&

条件或

||

条件

?:

赋值等

=  *=  /=  %=  +=  -=   &=  ^=  |=



数据类型

说明

取值范围

sbyte

1字节有符号整数

-27 ~+27 -1)即-128~127

byte

1字节无符号整数

0~28 -1)即0~255

short

2字节有符号整数

-215 ~+215 -1)即-32768~32767

ushort

2字节无符号整数

0 ~216 -1)即0~65535

int

4字节有符号整数

-231 ~+231 -1)即-2147483648~2147483647

uint

4字节无符号整数

0~+232 -1)即0~4294967295

long

8字节有符号整数

-263 ~+263 -1)即-9223372036854775808~9223372036854775807

ulong

8字节无符号整数

0~+264 -1)即0~18446744073709551615

 

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);//1
   preDecrement = --unary;
   Console.WriteLine("Pre-Decrement: {0}", preDecrement);//0
   postDecrement = unary--;
   Console.WriteLine("Post-Decrement: {0}", postDecrement);//0
   postIncrement = unary++;
   Console.WriteLine("Post-Increment: {0}", postIncrement);//-1
   Console.WriteLine("Final Value of Unary: {0}", unary);//0
   positive = -postIncrement;
   Console.WriteLine("Positive: {0}", positive);//1
   negative = +postIncrement;
   Console.WriteLine("Negative: {0}", negative);//-1
   bitNot = 0;
   bitNot = (sbyte)(~bitNot);
   Console.WriteLine("Bitwise Not: {0}", bitNot);//-1
   logNot = false;
   logNot = !logNot;
   Console.WriteLine("Logical Not: {0}", logNot);//True
   }
}

 

说明

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 类型数据的运算,返回结果都是整数(Int)。要把值赋给bitNot变量,我们必须使用cast(类型)运算符(强制类型转换),其中Type表示你希望转换成的类型(本例中为sbyte)。Cast运算符把大范围类型的数据转换为小范围类型的数据时,须特别谨慎,因为此时有丢失数据的危险。一般来说,把小类型的数据赋给大类型变量,并没有问题, 因为大范围数据类型的变量具有足够的空间存放小类型数据。 注意在signed unsigned类型之间进行Cast运算时,也存在此类危险。 许多初级程序设计教程对变量的位表示作出了很好的讲解,同时也介绍了直接进行Cast运算的危险。

6.逻辑非(!)运算符可以处理布尔变量值。本例中,"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);//12
   result = x-y;
   Console.WriteLine("x-y: {0}", result);//2
   result = x*y;
   Console.WriteLine("x*y: {0}", result);35
   result = x/y;
   Console.WriteLine("x/y: {0}", result);//1
   floatResult = (float)x/(float)y;
   Console.WriteLine("x/y: {0}", floatResult);//1.4
   result = x%y;
   Console.WriteLine("x%y: {0}", result);//2
   result += x;
   Console.WriteLine("result+=x: {0}", result);//9
   }
}

 

说明


清单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]);//5 10 15
   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]);//True  True (
如何写:myBools[1][1]呢?)
   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]);//3.147  56.00138917
   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]);// Joe Matt Robert
   }
}

 

说明


清单 1-4 演示了数组的各种不同实现方法。第一个例子是"myInts"数组,它在声明的同时进行了初始化。接着是个二维数组,可以把它理解为数组的数组。我们需要使用"new"运算符来实例化初始数组的大小,之后,再对每个子数组使用new运算符。第三个例子是个二维数组。数组可以是多维的,每一维可以通过逗号隔开,也必须用"new"运算符进行实例化。

最后定义了一个一维的字符串数组。每种情况下,对于数据元素的访问可以通过引用元素的位置(下标)来进行。数组的大小可以是任何整型值。其下标从0开始。

小结
到现在为止,你已经了解了C# 的变量,简单数据类型,数组和字符串。我们还学习了如何用C#的运算符构成表达式。

posted on 2009-10-07 20:21  qqhfeng16  阅读(966)  评论(0)    收藏  举报