运算符:就是告诉编译器执行特定的数学逻辑操作的符号
表达式
- 定义:表达式是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。
- 类型:表达式也是值类型。
算术运算符
+ - * / %
特点:
- 两个整数相除得到的结果一定是整数(取整数部分)。
- 除数和取余运算中,不能使用0作为除数。
- 小数可以除以0,结果为无穷大;对0取余得到NaN(不是一个数字)。
示例代码
using System;
class Program
{
static void Main()
{
// 声明变量
int a = 10;
int b = 3;
// 加法
int sum = a + b;
Console.WriteLine($"加法: {a} + {b} = {sum}");
// 减法
int difference = a - b;
Console.WriteLine($"减法: {a} - {b} = {difference}");
// 乘法
int product = a * b;
Console.WriteLine($"乘法: {a} * {b} = {product}");
// 整数除法
int quotient = a / b;
Console.WriteLine($"整数除法: {a} / {b} = {quotient}");
// 取模(余数)
int remainder = a % b;
Console.WriteLine($"取模: {a} % {b} = {remainder}");
// 小数除法
double quotientDouble = (double)a / b;
Console.WriteLine($"小数除法: {a} / {b} = {quotientDouble}");
}
}
输出结果
当你运行这段代码时,它将输出:
加法: 10 + 3 = 13
减法: 10 - 3 = 7
乘法: 10 * 3 = 30
整数除法: 10 / 3 = 3
取模: 10 % 3 = 1
小数除法: 10 / 3 = 3.3333333333333335
自增: 11
自减: 10
代码解释
-
声明变量:
int a = 10;
和int b = 3;
:这两行代码声明了两个整数变量a
和b
,并分别赋值为 10 和 3。
-
算术运算:
- 加法:
int sum = a + b;
计算a
和b
的和。 - 减法:
int difference = a - b;
计算a
减去b
的差。 - 乘法:
int product = a * b;
计算a
和b
的积。 - 整数除法:
int quotient = a / b;
计算a
除以b
的商(整数部分)。 - 取模:
int remainder = a % b;
计算a
除以b
的余数。 - 小数除法:
double quotientDouble = (double)a / b;
计算a
除以b
的商(浮点数)。
- 加法:
赋值运算符
+=, -=, *=, /=, %=:中间不能加空格,他们是一个整体
这些运算符用于简化赋值表达式,例如 a += b
等价于 a = a + b
。
示例代码
using System;
class Program
{
static void Main()
{
// 声明变量
int a = 10;
int b = 5;
// 简单赋值
int c = a;
Console.WriteLine($"简单赋值: c = {c}");
// 复合赋值运算符
a += b; // 等价于 a = a + b
Console.WriteLine($"a += b: a = {a}");
a -= b; // 等价于 a = a - b
Console.WriteLine($"a -= b: a = {a}");
a *= b; // 等价于 a = a * b
Console.WriteLine($"a *= b: a = {a}");
a /= b; // 等价于 a = a / b
Console.WriteLine($"a /= b: a = {a}");
a %= b; // 等价于 a = a % b
Console.WriteLine($"a %= b: a = {a}");
}
}
输出结果
当你运行这段代码时,它将输出:
简单赋值: c = 10
a += b: a = 15
a -= b: a = 10
a *= b: a = 50
a /= b: a = 10
a %= b: a = 0
代码解释
-
声明变量:
int a = 10;
和int b = 5;
:这两行代码声明了两个整数变量a
和b
,并分别赋值为 10 和 5。
-
简单赋值:
int c = a;
:这行代码将变量a
的值赋给变量c
。
-
复合赋值运算符:
- 加法赋值:
a += b;
等价于a = a + b;
计算a
加上b
的结果,并将结果赋给a
。 - 减法赋值:
a -= b;
等价于a = a - b;
计算a
减去b
的结果,并将结果赋给a
。 - 乘法赋值:
a *= b;
等价于a = a * b;
计算a
乘以b
的结果,并将结果赋给a
。 - 除法赋值:
a /= b;
等价于a = a / b;
计算a
除以b
的结果,并将结果赋给a
。 - 取模赋值:
a %= b;
等价于a = a % b;
计算a
除以b
的余数,并将结果赋给a
。
- 加法赋值:
注意事项
- 复合赋值运算符可以简化代码,使代码更加简洁。
- 复合赋值运算符中的运算符(如
+
,-
,*
,/
,%
)遵循算术运算符的规则
++ ,--
自加1,自减1
a = ++b, a= b++ 区别
1. ++ 在变量后跟着,先赋值,在++(自加1)
2. ++ 在变量前跟着,先++(自加1),再赋值,
++:自增,自身加一;++在前表示先让该变量加一,再让其参与运算。++在后表示先让该变量参与运
算,再让其加一。
-- :自减, 自身减一;--在前表示先让该变量减一,再让其参与运算。--在后表示先让该变量参与运
算,再让其减一。
示例代码
//++ --
//自加1 自减1
int a = 10;
int b = ++a;
Console.WriteLine(b);
Console.WriteLine(a);
int c = 11;
int d = c++; // d=11 c+1
int e = ++c;
Console.WriteLine(e);//13
比较运算符(关系运算符)
- <, >, <=, >=, ==, !=:返回布尔值,用于比较两个值的大小或相等性。
using System;
class Program
{
static void Main()
{
// 声明变量
int a = 10;
int b = 5;
// 比较运算符
bool isGreaterThan = a > b;
Console.WriteLine($"a > b: {isGreaterThan}");
bool isLessThan = a < b;
Console.WriteLine($"a < b: {isLessThan}");
bool isGreaterThanOrEqual = a >= b;
Console.WriteLine($"a >= b: {isGreaterThanOrEqual}");
bool isLessThanOrEqual = a <= b;
Console.WriteLine($"a <= b: {isLessThanOrEqual}");
bool isEqual = a == b;
Console.WriteLine($"a == b: {isEqual}");
bool isNotEqual = a != b;
Console.WriteLine($"a != b: {isNotEqual}");
}
}
输出结果
当你运行这段代码时,它将输出:
a > b: True
a < b: False
a >= b: True
a <= b: False
a == b: False
a != b: True
代码解释
-
声明变量:
int a = 10;
和int b = 5;
:这两行代码声明了两个整数变量a
和b
,并分别赋值为 10 和 5。
-
比较运算符:
- 大于:
a > b
检查a
是否大于b
。 - 小于:
a < b
检查a
是否小于b
。 - 大于等于:
a >= b
检查a
是否大于等于b
。 - 小于等于:
a <= b
检查a
是否小于等于b
。 - 等于:
a == b
检查a
是否等于b
。 - 不等于:
a != b
检查a
是否不等于b
。
- 大于:
-
布尔结果:
- 每个比较运算符的结果都被赋给了一个布尔变量,并打印出来。
注意事项
- 比较运算符返回布尔值
true
或false
。 - 这些运算符可以用于任何可以比较的数据类型,如整数、浮点数、字符串等。
三目运算符
- 格式:
条件表达式 ? 值1 : 值2
。- 如果条件表达式的值为
true
,则返回值1
;否则返回值2
。
- 如果条件表达式的值为
示例代码
using System;
class Program
{
static void Main()
{
// 声明变量
int age = 18;
int temperature = 25;
// 判断是否成年
string adultStatus = age >= 18 ? "成年" : "未成年";
Console.WriteLine($"年龄为 {age} 岁,状态为:{adultStatus}");
// 根据温度判断天气
string weather = temperature < 10 ? "寒冷" : (temperature >= 10 && temperature <= 20) ? "凉爽" : "温暖";
Console.WriteLine($"温度为 {temperature} 度,天气为:{weather}");
}
}
输出结果
当你运行这段代码时,它将输出:
年龄为 18 岁,状态为:成年
温度为 25 度,天气为:温暖
代码解释
-
声明变量:
int age = 18;
:声明一个整数变量age
并赋值为 18。int temperature = 25;
:声明一个整数变量temperature
并赋值为 25。
-
三目运算符:
- 判断是否成年:
string adultStatus = age >= 18 ? "成年" : "未成年";
检查年龄是否大于等于 18 岁,如果是,则返回 "成年";否则返回 "未成年"。 - 根据温度判断天气:
string weather = temperature < 10 ? "寒冷" : (temperature >= 10 && temperature <= 20) ? "凉爽" : "温暖";
根据温度判断天气状况,如果温度低于 10 度,则返回 "寒冷";如果温度在 10 到 20 度之间,则返回 "凉爽";否则返回 "温暖"。
- 判断是否成年:
-
输出结果:
- 打印年龄状态和天气情况。
注意事项
- 三目运算符可以用于任何类型的值,只要这些值可以相互转换。
- 三目运算符的结果必须是一个确定的类型,例如字符串或整数。
- 三目运算符可以嵌套使用,以实现更复杂的条件判断。
逻辑运算符
- &(与)、|(或)、&&(短路与)、||(短路或)、!(非):
&
和|
总是执行两边的表达式。&&
和||
发生短路,如果第一个表达式就能确定结果,则不会执行第二个表达式。
&:T&T=T T&F=F F&T=F F&F=F;两边表达式都会执行;两边都是真,整体才是真。
|:T|T=T T|F=T F|T=T F|F=F;两边表达式都会执行;两边有一个真,整体就是真。
&&:T&&T=T T&&F=F F&&T=F F&&F=F;会发生短路,前面如果是 F 那么后面表达式不执行;两
边都是真,整体才是真。
||:T||T=T T||F=T F||T=T F||F=F;会发生短路,前面如果是 T 那么后面表达式不执行;两边有
一个真,整体就是真。
!:!T=F !F=T;取反操作
示例代码
using System;
class Program
{
static void Main()
{
// 声明变量
bool isAdult = true;
bool hasLicense = false;
int age = 18;
int temperature = 25;
// 逻辑与运算符 (& 和 &&)
bool canDrive = isAdult & hasLicense;
Console.WriteLine($"可以开车: {canDrive}");
bool canDriveShortCircuit = isAdult && hasLicense;
Console.WriteLine($"可以开车 (短路): {canDriveShortCircuit}");
// 逻辑或运算符 (| 和 ||)
bool isColdOrHot = temperature < 10 | temperature > 30;
Console.WriteLine($"天气寒冷或炎热: {isColdOrHot}");
bool isColdOrHotShortCircuit = temperature < 10 || temperature > 30;
Console.WriteLine($"天气寒冷或炎热 (短路): {isColdOrHotShortCircuit}");
// 逻辑非运算符 (!)
bool isNotAdult = !isAdult;
Console.WriteLine($"不是成年人: {isNotAdult}");
// 使用逻辑运算符进行更复杂的条件判断
bool isEligibleForDiscount = (age >= 65 || age <= 12) && temperature >= 20;
Console.WriteLine($"符合条件享受折扣: {isEligibleForDiscount}");
}
}
输出结果
当你运行这段代码时,它将输出:
可以开车: False
可以开车 (短路): False
天气寒冷或炎热: False
天气寒冷或炎热 (短路): False
不是成年人: False
符合条件享受折扣: False
代码解释
-
声明变量:
bool isAdult = true;
:声明布尔变量isAdult
并赋值为true
。bool hasLicense = false;
:声明布尔变量hasLicense
并赋值为false
。int age = 18;
:声明整数变量age
并赋值为 18。int temperature = 25;
:声明整数变量temperature
并赋值为 25。
-
逻辑运算符:
- 逻辑与运算符:
&
:执行两边的表达式,只有两边都是true
时结果才为true
。&&
:发生短路,如果第一个表达式为false
,则不会执行第二个表达式。
- 逻辑或运算符:
|
:执行两边的表达式,只要有一边为true
,结果就为true
。||
:发生短路,如果第一个表达式为true
,则不会执行第二个表达式。
- 逻辑非运算符:
!
:取反操作,将true
变为false
,false
变为true
。
- 逻辑与运算符:
-
布尔结果:
- 每个逻辑运算符的结果都被赋给了一个布尔变量,并打印出来。
注意事项
&
和|
总是执行两边的表达式。&&
和||
会发生短路行为,如果第一个表达式就能确定结果,则不会执行第二个表达式。- 逻辑运算符可以用于复杂的条件判断,以决定程序的流程。
运算符优先级
- 从高到低:
- 成员访问
.
, 圆括号()
, 大括号{}
, 分号;
- 自增自减
++
,--
, 逻辑非!
- 乘法
/
, 除法*
, 取模%
- 加法
+
, 减法-
- 关系运算
<
,>
,<=
,>=
- 等于
==
, 不等于!=
- 位与
&
- 位或
|
- 逻辑与
&&
- 逻辑或
||
- 三目运算符
?:
- 成员访问
数学运算
- Math 类:C#内置的类,提供了一些数学运算的函数,如绝对值、取整、最大值、最小值等。
示例代码
using System;
class Program
{
static void Main()
{
// 声明变量
int number = -33;
double value = 3.4;
// 数学运算
double absoluteValue = Math.Abs(number);
Console.WriteLine($"绝对值: {absoluteValue}");
double roundedValue = Math.Round(value);
Console.WriteLine($"四舍五入: {roundedValue}");
double floorValue = Math.Floor(value);
Console.WriteLine($"向下取整: {floorValue}");
double ceilingValue = Math.Ceiling(value);
Console.WriteLine($"向上取整: {ceilingValue}");
double maxValue = Math.Max(10, 30);
Console.WriteLine($"最大值: {maxValue}");
double minValue = Math.Min(10, 30);
Console.WriteLine($"最小值: {minValue}");
double powerValue = Math.Pow(2, 4);
Console.WriteLine($"幂运算 (2^4): {powerValue}");
double squareRoot = Math.Sqrt(9);
Console.WriteLine($"开平方根: {squareRoot}");
double pi = Math.PI;
Console.WriteLine($"圆周率 π: {pi}");
// 获取数值类型的最大值和最小值
long maxIntValue = long.MaxValue;
Console.WriteLine($"整数类型最大值: {maxIntValue}");
double maxDoubleValue = double.MaxValue;
Console.WriteLine($"双精度浮点数类型最大值: {maxDoubleValue}");
long minIntValue = long.MinValue;
Console.WriteLine($"整数类型最小值: {minIntValue}");
double minDoubleValue = double.MinValue;
Console.WriteLine($"双精度浮点数类型最小值: {minDoubleValue}");
// 负无穷大和正无穷大
double negativeInfinity = double.NegativeInfinity;
Console.WriteLine($"负无穷大: {negativeInfinity}");
double positiveInfinity = double.PositiveInfinity;
Console.WriteLine($"正无穷大: {positiveInfinity}");
}
}
输出结果
当你运行这段代码时,它将输出:
绝对值: 33
四舍五入: 3
向下取整: 3
向上取整: 4
最大值: 30
最小值: 10
幂运算 (2^4): 16
开平方根: 3
圆周率 π: 3.14159265358979
整数类型最大值: 9223372036854775807
双精度浮点数类型最大值: 1.79769313486232E+308
整数类型最小值: -9223372036854775808
双精度浮点数类型最小值: -1.79769313486232E+308
负无穷大: -∞
正无穷大: ∞
代码解释
-
声明变量:
int number = -33;
:声明整数变量number
并赋值为 -33。double value = 3.4;
:声明双精度浮点数变量value
并赋值为 3.4。
-
数学运算:
- 绝对值:
Math.Abs(number)
计算number
的绝对值。 - 四舍五入:
Math.Round(value)
对value
进行四舍五入。 - 向下取整:
Math.Floor(value)
对value
向下取整。 - 向上取整:
Math.Ceiling(value)
对value
向上取整。 - 最大值:
Math.Max(10, 30)
计算 10 和 30 中的最大值。 - 最小值:
Math.Min(10, 30)
计算 10 和 30 中的最小值。 - 幂运算:
Math.Pow(2, 4)
计算 2 的 4 次幂。 - 开平方根:
Math.Sqrt(9)
计算 9 的平方根。 - 圆周率:
Math.PI
获取圆周率 π 的值。
- 绝对值:
-
数值类型的最大值和最小值:
long.MaxValue
和long.MinValue
获取整数类型的最大值和最小值。double.MaxValue
和double.MinValue
获取双精度浮点数类型的最大值和最小值。
-
无穷大:
double.NegativeInfinity
获取负无穷大。double.PositiveInfinity
获取正无穷大。
注意事项
Math
类提供了许多静态方法,用于执行数学运算。- 数值类型的最大值和最小值可以帮助确定数值的有效范围。