【C#学习教程】运算符(一)

大家在学习C#的过程中,运算符也是我们学习路上非常重要的存在,比如说运算的“+、-、*、/”,又比如逻辑判断的“|、&”等等,这些都组成了我们C#语言的运算符。

一、C#算术运算符

在 C# 中,算术运算符通常用于执行数学运算。以下是 C# 支持算术运算符,让我们一起来看看:

加法运算符 +

  • 用于将两个数相加。
  • 也可以用于字符串连接。
    int a = 5;
    int b = 3;
    int sum = a + b; // 8
    string greeting = "Hello, " + "world!"; // "Hello, world!"

减法运算符 -

  • 用于从一个数中减去另一个数。
int a = 5;
int b = 3;
int difference = a - b; // 2

乘法运算符 *

  • 用于将两个数相乘。
int a = 5;
int b = 3;
int product = a * b; // 15

除法运算符 /

  • 用于将一个数除以另一个数。
  • 用于将一个整数除以另一个整数,如果定义为int,那么返回结果也为整数。
int a = 5;
int b = 3;
double quotient = (double)a / b; // 1.6666666666666667
int quotient2 = a / b; // 1

模运算符 %(取余)

  • 用于求两个数相除的余数。
int a = 5;
int b = 3;
int remainder = a % b; // 2

幂运算符 ^

  • 用于计算一个数的另一个数次幂。
  • 注意:这不是一个标准的 C# 算术运算符,需要 using System; 命名空间。
int baseNum = 2;
int exponent = 3;
int result = (int)Math.Pow(baseNum, exponent); // 8

递增运算符 ++

  • 用于将变量的值增加一。
int a = 5;
a++; // a 现在是 6

递减运算符 --

  • 用于将变量的值减少一。
int a = 5;
a--; // a 现在是 4

算术运算符的优先级

在 C# 中,算术运算符的优先级决定了在没有括号指定顺序的情况下,表达式中运算符的执行顺序。从最高到最低:

  • 幂运算符 ^(表示幂运算,不是位异或)

    • 幂运算符的优先级最高,它会在其他算术运算之前执行。
  • 一元加减运算符 +, -(表示正负号)

    • 一元加和一元减运算符(用于改变一个数的符号)也具有高优先级。
  • 乘法、除法和整除运算符 *, /, %

    • 这三个运算符优先级相同,按照从左到右的顺序执行。
  • 加法和减法运算符 +, -(表示数值相加减)

    • 这两个运算符优先级相同,按照从左到右的顺序执行。

以下给大家做了个例子:

int a = 10;
int b = 5;
int c = 3;

// 正确的运算顺序是先幂运算,然后乘法,最后加法
int result1 = a + b * c; // 等价于 int result1 = a + (b * c);
// 正确的结果是 10 + (5 * 3) = 10 + 15 = 25

// 如果使用括号改变优先级
int result2 = (a + b) * c; // 等价于 int result2 = (10 + 5) * 3;
// 正确的结果是 (10 + 5) * 3 = 15 * 3 = 45

// 幂运算符优先级最高
int result3 = a + b ^ c; // 等价于 int result3 = a + (b ^ c);
// 正确的结果是 10 + (5 ^ 3),如果使用位异或运算符,则需要使用括号
// 正确的结果是 10 + (5 ^ 3) = 10 + 6 = 16

// 一元运算符
int result4 = -a + b; // 等价于 int result4 = (-a) + b;
// 正确的结果是 -10 + 5 = -5

为了确保表达式按照预期的方式执行,可以使用括号 () 来明确指定运算顺序,这样可以覆盖默认的优先级规则。这是一个好的编程习惯,特别是在复杂的表达式中,使用括号可以提高代码的可读性和正确性。

二、关系运算符

关系运算符也是C#很常用的运算符,用于比较两个值,并返回布尔值(truefalse)。以下是 C# 中的关系运算符:

等于 ==

  • 检查两个值是否相等。
bool isEqual = (a == b); // 如果 a 和 b 相等,则返回 true

不等于 !=

  • 检查两个值是否不相等。
bool isNotEqual = (a != b); // 如果 a 和 b 不相等,则返回 true

大于 >

  • 检查左侧的值是否大于右侧的值。
bool isGreaterThan = (a > b); // 如果 a 大于 b,则返回 true

小于 <

  • 检查左侧的值是否小于右侧的值。
bool isLessThan = (a < b); // 如果 a 小于 b,则返回 true

大于等于 >=

  • 检查左侧的值是否大于或等于右侧的值。
bool isGreaterThanOrEqual = (a >= b); // 如果 a 大于或等于 b,则返回 true

小于等于 <=

  • 检查左侧的值是否小于或等于右侧的值。
bool isLessThanOrEqual = (a <= b); // 如果 a 小于或等于 b,则返回 true

这些关系运算符用于所有可比较的类型,包括数值类型(如 intdoubledecimal)、枚举类型以及字符串类型。它们在条件语句(如 if)、循环(如forwhile 等)和其他逻辑表达式中经常使用。

请注意,==!= 运算符也可以用于比较对象的引用是否指向同一位置(即是否是同一个对象的引用),而不仅仅是比较它们的值。对于值类型的比较,它们会比较值是否相等;对于引用类型的比较,它们会比较引用是否相同。如果需要比较对象的内容是否相等,通常需要重写 Equals 方法或使用 SequenceEqual 方法(对于集合类型)。

关系运算符使用案例:

int x = 15;
int y = 20;

// 使用关系运算符在 if 语句中
if (x < y) {
    Console.WriteLine("x is less than y"); // 输出
}

// 在 for 循环中使用
for (int i = 0; i < 5; i++) {
    Console.WriteLine(i);
}

// 在逻辑表达式中使用
bool result = (x > 10) && (y < 30);

三、逻辑运算符

它用于结合两个布尔表达式,并返回一个布尔值(truefalse)。以下逻辑运算符:

逻辑与 &&

  • 当且仅当两个操作数都为 true 时,结果才为 true。它是短路运算符,如果第一个操作数为 false,则第二个操作数不会执行。
bool result = (condition1 && condition2); 
// 如果 condition1 和 condition2 都为 true,则 result 为 true

逻辑或 ||

  • 如果两个操作数中至少有一个为 true,则结果为 true。它也是短路运算符,如果第一个操作数为 true,则第二个操作数不会执行。
bool result = (condition1 || condition2); 
// 如果 condition1 或 condition2 至少一个为 true,则 result 为 true

逻辑非 !

  • 反转操作数的布尔值,如果操作数为 true,则结果为 false;如果为 false,则结果为 true
bool result = !condition; 
// 如果 condition 为 false,则 result 为 true

逻辑运算符通常用于条件语句(如 ifwhile 等)和复杂的逻辑表达式中。短路逻辑运算符 &&|| 的特点是,如果第一个操作数足以确定整个表达式的结果,那么第二个操作数不会被求值。这可以防止不必要的计算,并在某些情况下避免运行时错误。

逻辑运算符的使用案例:

bool a = true;
bool b = false;

// 逻辑与
bool andResult = a && b; // false,因为 b 为 false

// 逻辑或
bool orResult = a || b; // true,因为 a 为 true

// 逻辑非
bool notResult = !a; // false,因为 a 为 true

逻辑运算符是控制程序流程和实现复杂逻辑条件的重要工具。

四、赋值运算符

赋值运算符用于将值赋给变量,最常见的“=”就是赋值运算符

简单赋值 =

  • 将右侧表达式的值赋给左侧的变量。
int myNumber = 10; // 将整数 10 赋值给变量 myNumber
string myString = "Hello"; // 将字符串 "Hello" 赋值给变量 myString

复合赋值

结合了算术运算符和赋值运算符,用于将左侧变量与右侧表达式的结果相加减乘除后,再赋值回左侧变量。

加法赋值 +=

int a = 5;
a += 3; // 等同于 a = a + 3; 结果是 a = 8

减法赋值 -=

int a = 5;
a -= 3; // 等同于 a = a - 3; 结果是 a = 2

乘法赋值 *=

int a = 5;
a *= 3; // 等同于 a = a * 3; 结果是 a = 15

除法赋值 /=

int a = 10;
a /= 2; // 等同于 a = a / 2; 结果是 a = 5

模赋值 %=

int a = 10;
a %= 3; // 等同于 a = a % 3; 结果是 a = 1

位左移赋值 <<=

int a = 1;
a <<= 2; // 等同于 a = a << 2; 结果是 a = 4 (二进制左移两位)

位右移赋值 >>=

int a = 4;
a >>= 1; // 等同于 a = a >> 1; 结果是 a = 2 (二进制右移一位)

位与赋值 &=

int a = 0b1010;
int b = 0b1100;
a &= b; // 等同于 a = a & b; 结果是 a = 0b1000

位或赋值 |=

int a = 0b1010;
int b = 0b1100;
a |= b; // 等同于 a = a | b; 结果是 a = 0b1110

位异或赋值 ^=

int a = 0b1010;
int b = 0b1100;
a ^= b; // 等同于 a = a ^ b; 结果是 a = 0b0110

复合赋值运算符提供了一种快捷方式,可以在单个语句中执行运算和赋值操作。这在需要迭代变量或在循环中更新变量值时非常有用。

请注意,对于浮点数和整数的除法赋值,如果左侧变量是整数类型,那么结果将执行整数除法,即使右侧表达式的结果是一个浮点数。如果需要浮点结果,应该确保至少有一个操作数是浮点类型:

int a = 10;
a /= 3; // 结果是 3,因为整数除法
a = 10;
a = a / 3.0; // 结果是 3.333333,因为使用了浮点数 3.0

赋值运算符是编程中最基本的操作之一,用于在程序中存储和更新数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光酱ZG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值