C#三学教程 - 算术运算符

C#算术运算符

为所有数字类型定义算术运算符(+, - ,*,/,%)。

运算符 含义
+
-
*
/
% 求余

自增和自减运算符

自增和自减运算符(++, --)将数值类型递增和递减1。

操作符可以跟随也可以在变量之前,取决于我们希望其值在增加/减少之前还是之后。

例如:


int x = 0, y = 0; 
Console.WriteLine (x++); // Outputs 0; x is now 1 Console.WriteLine (++y); // Outputs 1; y is now 1 

整数除法

整数类型的除法运算总是截断余数。

除以值为零的变量会生成运行时错误。

除以文字或常量0会产生编译时错误。

整数溢出

在运行时,对整数类型的算术运算可能溢出。

例如,递减最小可能的int值导致最大可能的int值:


int a = int.MinValue; 
a--; 
Console.WriteLine (a == int.MaxValue); // True 

checked 运算符告诉运行时生成一个OverflowException ,而不是在溢出的情况下无声地溢出。

checked 运算符在整数类型之间使用++, - ,+, - ,*,/和显式转换运算符影响表达式。

checked 运算符对double和float类型没有影响。

checked 运算符对始终检查的十进制类型没有影响。

checked 可以在表达式或语句块周围使用。

例如:


int a = 1000000; 
int b = 1000000; 

int c = checked (a * b); // Checks just the expression. 
// Checks all expressions in statement block. checked{       
    ... 
    c = a * b; 
    ... 
} 

我们可以通过使用/checked+命令行开关编译来检查程序的所有算术溢出。

要禁用特定表达式或语句的溢出检查,请使用unchecked的运算符。

例如,以下代码不会抛出异常 - 即使使用/ checked + :


int x = int.MaxValue; 
int y = unchecked (x + 1); 
unchecked { int z = x + 1; } 

不管 /checked 编译器切换,在编译时评估的表达式总是被overflow-checked - 除非我们应用unchecked 运算符:


int x = int.MaxValue + 1;             // Compile-time error int y = unchecked (int.MaxValue + 1); // No errors 

位运算符

C#支持以下位运算符:

运算符 含义 示例表达式 结果
~ Complement ~0xfU 0xfffffff0U
& And 0xf0& 0x33 0x30
| Or 0xf0 | 0x33 0xf3
^ Exclusive Or 0xff00 ^ 0x0ff0 0xf0f0
<< Shift left 0x20<< 2 0x80
>> Shift right 0x20>> 1 0x10

发表评论

© 2022 狸玖技术站 - 基于 WordPress