详解运算符
- 初识运算符
- 位运算
- 认识位运算的相关运算符。
- 能实现什么样的操作?及实现原理。
- 比较运算符
- 逻辑运算符
- 赋值运算符
初识运算符
运算符分为5大类:算数运算符、赋值运算符、复合赋值运算符、比较运算符、逻辑运算符。算数运算符就是加减乘除运算,
比较运算符(布尔类型,进行大小比较),关系运算符进行值的大小比较(按照一定的关系来进行)。位运算符。按照比特位来进行进行(+,-,*,/)运算。
位运算
从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。
认识位运算的相关运算符。
能实现什么样的操作?及实现原理。
计算机在对于相关数据进行存储时不会直接存储数字字符。平时使用的A~Z在计算机中显示是以字符形式出现的。数字字符在计算机中以ascll码来进行数据储存。
int main()
{
int i = 0;
scanf("%d", &i);
printf("%c", i);
return 0;
}
通过上面代码可以看出实际我们使用的字符并不是直接以字符形式存储的。
所以在我们进行运算时,计算机其实是在使用二进制位来进行运算。都是以补码进行的。
按位与(&):
1、清0操作。 2、对于指定位输出。 3、判断奇偶。
判断奇偶可以使用最低位是否为1,来进行判断。最低位的权重是0,计算时就是20的值来判断。
按位或(|)
指定位置1
按位异或(^)
1、指定位翻转
2、进行俩数交换
3、与0进行异或时,值不会发生改变。
对于俩数交换,可以不使用临时变量,但是对于数值太大会产生溢出。
void Swap(int &a, int &b){
if (a != b){
a ^= b;
b ^= a;
a ^= b;
}
}
取反运算符(~)
可以实现对于参与运算的二进制进行0、1的“取反”操作
左移(<<)、右移(>>)运算符
可以实现对于二进制位的移位操作,值得注意的是如果左移就是后面左边补0。右移是右边补符号位(正数补0,负数补1)。
对于二进制的左移会对值扩大2倍,右移减少2倍。
比较运算符
算术运算符、赋值运算符和关系运算符的优先级是什么?
优先级排序为:算术运算符 > 关系运算符 > 赋值运算。
算术运算符中,乘法运算符【*】、除法运算符【/】、取余运算符【%】属于优先级第三级,加法运算符【+】、减法运算符【-】属于第四级。
关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。其中,关系运算符【< > <= >=
】属于优先级第六级,等于运算符【==】、不等于运算符【!=】属于优先级第七级。赋值运算符【= += -= *= /= %= >>= <<= &= |= ^=】属于优先级第第十四级。
所以,优先级排序为:算术运算符高于关系运算符高于赋值运算。
关系运算符使用比较频繁,在条件判断语句中,循环语句中都常用。对于比较来说规则可以由我们来设计,对于名字的比较,日期比较……自定义类型比较就是就可采用自己设计规则来比较。对于布尔类型的判断true,false。可以使用整数1为真,0为假。
逻辑运算符
逻辑运算符就比较简单,也称为逻辑 与、逻辑或、逻辑非运算。主要用于多个条件的前提下同时使用。
常见就是对于闰年的判断实现。
if((year%400==0)||((year%100!=0)&&(year%4==0));
需要知道逻辑表达式是一个“短路计算”一旦确定整个表达式的值就会立刻停止。
赋值运算符
赋值运算符是可以看作是运算后的重新赋值给原来的值,会改变原有值。
以上便是运算符的基础认知,对于比较运算符的规则制定,可以参考C++类模板中的运算符重载。