c#入门-运算符

赋值运算符

赋值运算符接触的最多,即等号=

但是赋值运算符还有一堆基于其他运算符的变种
比如i=i+3
把自己+3得到的值再赋值给自己
可以简写为i+=3
[变量]=[自己] [运算符] [表达式] 等价于 [变量] [运算符] =[表达式]

这种形式的作用基于他原本的定义
意思是说你以后可以自己定义
+-*/各自的作用
但是+=,-=,/=,*=不能单独定义
+是什么作用,+=的作用就会一起被定义

算术运算符

算数运算符有5个,加减乘除取余+-*/%
百分号的那个符号是用来获取余数的

比较运算符

比较运算符有6个
==等于
!=不等于
<=小于等于
>=大于等于
<小于
>大于

逻辑运算符

逻辑运算符有3个
!非。取反,对的变成错的,错的变成对的
&&且。a&&b中,ab任意为假则输出假,都真时为真
||或。a||b中,ab任意一个为真输出真

如果3个同时存在,执行顺序是非,且,或

位运算符(支线任务)

位运算符一共有7种
&位且
|位或
^位异或
~位取反
>>位右移
<<位左移

位运算符的作用要拆到2进制来想
int类型的a&b就是拆成2进制的数值,一共32位
然后对每个数位上都进行一次&&判断
比如
13:01101
27:11011
结果便会得到
09:01001

位或同理
位异或,异或就是两个值不一样就输出真,一样就输出假。
你家卧室床头和门口各一个开关对灯的控制就是异或的关系

同或,同或就是异或的取反,这个在c#中没多大意义所以没有这玩意

位取反,对每一位都取反
其结果并不是他的负数。具体原因在整型中的补码中有介绍

左移和右移

int i=12;
i=i<<2;

写法是在右边写位移的位数,溢出的舍去,没有的补0
其直接结果是除2和乘2,但是注意,最高位是符号位,他会一起被移动

备注

在bool类型表达式你能看见
a && b 和 a & b 两种写法
布尔类型的位运算和逻辑运算的结果是一样的
区别在与逻辑运算能得出结果之后就不会再执行或判断后面的值

可以的得出结果的意思是,逻辑与出现了否,无论后面结果如何都是否
逻辑或出现了真,无论后面结果如何都是真

附表

怕你们以后看见这种写法没反应过来写一遍赋值变种
+=
-=
*=
/=
%=
&=
|=
~=
>>=
<<=
比较和逻辑运算符没有变种
bool不能用位移符号
除非用于加密不然位运算符用的很少

支线任务

cpu算加法的原理

进位=a&&b
原位=a^b

如果两个位置不一样,那么输出结果为1
因为如果都是0那加起来还是0,如果都是1那就进位了,又变成0
只有一个1一个0的情况下才会得到1

进位更好理解,只有都是1的时候才会进位

有个题目叫"为什么说异或是不进位的加法"
原理摆在这应该很好理解

CPU算减法的原理

整型的支线任务的补码中有说
CPU不能算减法,都是改成加法算的

CPU算乘法的原理

和我们一样列竖式,但是2进制的竖式显然比我们好算
0就不复制,1就复制过来,按照数位偏移,最后算加法

CPU算除法的原理

我还没学会

位运算和乘除法的效率比较

如果不看符号位的变动,位运算就相当于乘2和除2
那么用位运算代替数学运算会不会快一些呢

位运算直接移动原本的数据
乘法会列竖式,得到一个位移以后的值
然后用新值替代旧值
显然直接移动会更快一些

猜你喜欢

转载自blog.csdn.net/zms9110750/article/details/108657020
今日推荐