C#中的各种运算符

学习记录{第3篇}——C#中的各种运算符

一元运算符
*1、++(加加),–(减减)。*用得很多,最需要注意就是这两个运算符在变量前还是在变量后。
当++或者–在变量后面时,先进行赋值,再进行自加或自减。

int a = 1;
int b = a++;

Console.WriteLine(b);//输出1
Console.WriteLine(a);//输出2

当++或者–在变量前面时,先进行自加或自减,再进行赋值。

int a = 1;
int b = ++a;

Console.WriteLine(b);//输出2
Console.WriteLine(a);//输出2

2、+(正),-(负)。
+号用途不大,表示正数,在一个负数前面添加+号,输出仍是负数。

int a = -1;
int b = +a;

Console.WriteLine(b);//输出-1

-号具有给数值取相反数的作用。

int a = -1;
int b = -a;

Console.WriteLine(b);//输出1

3、!(非)布尔值取反。

bool a = true;
bool b = !a;

Console.WriteLine(b);//输出False

*4、~(按位取反)。*将整型数值,先转成二进制,然后每一位取反,得到新的二进制,再转成整型给你。

int a = 1;//0000 0001
int b = ~a;//1111 1110

Console.WriteLine(b);//输出-2

*tips1:*有疑问,1111 1110怎么就是-2了?不应该是254吗?因为C#中操作的都是有符号整型,使用补码表示法。那是不是我定义一个无符号的整型变量,再将这个变量按位取反,是不是就能得到原码表示法的数了呢?答案是不行,因为C#中只要你使用了~,编译器都会给你先将无符号整型变为有符号整型,再进行按位取反操作。

byte a = 1;//定义了byte型
int b = ~a;//但是在~运算之前,C#会先将byte转换为int

Console.WriteLine(b);//输出仍是-2

想要得到源码表示法的数,需要显式转换成无符号整型。

int a = 1;
int b = ~a;
Console.WriteLine(b);//输出-2

byte c = (byte)b;

Console.WriteLine(c);//输出254

了解下就行,前期学习无需纠结,一般的C#开发行业应该是用不到这个的。

二元运算符
1、(乘)、/(除)、%(取余)、+(加)、-(减)。*用得很多,要注意的就是/和%。
两个整数 / 的结果是取整数,不进位;% 是取余数。

int a = 5;
int b = 2;

double c = a + b;
double d = a - b;
double e = a * b;
double f = a / b;
double g = a % b;

Console.WriteLine(c);//输出7
Console.WriteLine(d);//输出3
Console.WriteLine(e);//输出10
Console.WriteLine(f);//输出2,取除法结果的整数位,不进位。如果a、b中有浮点型,则结果为2.5。
Console.WriteLine(g);//输出1,5除以2余1,所以结果为1

2、<<(位左移)、>>(位右移)。 将整型先转换成二进制,然后再移位,再转换成整型输出。

“<<” 向左移动指定的次数,右边用0填充。

int a = 5;//0000 0101
int b = a << 2;//0001 0100

Console.WriteLine(b);//输出20

“>>” 向右移动指定的次数,左边用符号位填充(有符号类型)或用0填充(无符号类型)。

int a = 20;//0001 0100
int b = a >> 2;//0000 0101

Console.WriteLine(b);//输出5

*3、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(相等)、!=(不相等)。*这些都是关系运算符,判断运算符左右变量的关系,返回bool值。

int a = 20;
int b = 10;
bool c;

c = a > b;
Console.WriteLine(c);//输出true

c = a < b;
Console.WriteLine(c);//输出false

c = a >= b;
Console.WriteLine(c);//输出true

c = a <= b;
Console.WriteLine(c);//输出false

c = a == b;
Console.WriteLine(c);//输出false

c = a != b;
Console.WriteLine(c);//输出true

*4、&(按位与)、|(按位或)、^(按位异或)。*将运算符两边的数值转换为二进制,然后对对应位进行相关运算。返回整型。

&(按位与):两个数的二进制对应位执行逻辑与操作。只有当对应位都为1时,结果位才为1;否则,结果位为0。

int a = 12;    // 1100
int b = 10;    // 1010
int c = a & b; // 1000

Console.WriteLine(c);  // 输出 8

|(按位或):两个数的二进制对应位执行逻辑与操作。对应位只要有一个1,结果位就为1;对应位都是0,结果位才为0。

int a = 12;    // 1100
int b = 10;    // 1010
int c = a | b; // 1110

Console.WriteLine(c);  // 输出 14

^(按位异或):两个数的二进制对应位执行逻辑与操作。只有当对应位不同时,结果位才为1;对应位相同,结果位为0。

int a = 12;    // 1100
int b = 10;    // 1010
int c = a ^ b; // 0110

Console.WriteLine(c);  // 输出 6

*5、&&(逻辑与)、||(逻辑或)。*判断运算符两边条件,返回bool值。

&&:当两边条件都是对的时,最终结果才是对的;||:两边的条件只要有一个对的,那就是对的。

int a = 20;
int b = 10;

bool c = a > b && a > 20;
Console.WriteLine(c);//输出false

bool d = a > b || a > 20;
Console.WriteLine(d);//输出true

*6、= (赋值)、 += (加赋值)、-= (减赋值)、 *= (乘赋值)、 /= (除赋值)、 %= (取余赋值)、 &= (按位与赋值)、 |= (按位或赋值)、^= (按位异或赋值)、<<= (左移赋值)、 >>= (右移赋值)。*赋值运算符的优先级是最低的,也就是其它运算符都算完了,最后才赋值;除了第一个单纯的=(赋值),其余的赋值运算意思是:a += 1即a = a + 1;只是一种简写。

三元运算符

1、?:(三元运算符)。 可以简化代码,记住语法就行。

int a = 20;
int b = 10;

int c = (a > b) ? 100 : 0;//意思是:a大于b吗?大于的话c就等于100,否则c等于0。

Console.WriteLine(c);//输出100

tips2:上面罗列的顺序基本上就是优先级,除了最后的三元运算符的优先级比(=赋值运算符)要高一点可以排在倒数第二。

-----------------------------------------第3篇结束-------------------------------------------

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值