在前面的一系列文章里,我们一起学习了C语言的基础语法,函数和数组的相关知识,而接下来,让我们一起学习操作符。操作符在C语言中同样有着举足轻重的地位,它的使用可以说是无处不在,能够深入理解并且熟练运用操作符往往能够使我们写出的代码更加准确,精致,巧妙和优雅。接下来,就让我们一起走入操作符的世界吧!!!
1.操作符的分类
物以类聚,人以群分。不同的人,不同的风格,干不同的事情。操作符都有哪些种类,各自又有哪些独特的作用呢?
操作符可以分为以下几种:
算数操作符 位移操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员
下面我来为大家详细讲解每一类操作符的特性和使用方法。
2.算数操作符
+ - * / %
加减乘除想必大家都不陌生。
在C语言中,加减乘除可以作用于整数和浮点数。对于 / 操作符需要注意的是,如果两个操作数都是整数,则执行整数除法,而只要有浮点数,执行的就是浮点数除法。
% 叫做取模操作符,它的两个操作数必须是整数,它的作用是返回整除之后的余数,比如:5%3等于2
3.位移操作符
位移操作符的操作符是计算机中的二进制,这就需要我们对数在计算机中的存储规则有一定的了解,关于原码、反码和补码的知识想必大家都能已掌握,这里不在赘述。
<< 左移操作符 >> 右移操作符
3.1 左移操作符
位移规则 : 左边抛弃、右边补0。num<<1,表示表示如下:
但在实际上num在没有被赋值的情况下,自身的值是不会变化的。
3.2右移操作符
右移运算分为两种:
1.逻辑右移:左边用0补充,右边丢弃
2.算数右移:左边用原该值的符号位补充,右边丢弃
警告:对于位移运算符,不要移动负数位,这个标准是未定义的。比如:
int num = 10; num<<-1;//error
4.位操作符
位操作符有:
& //按位与 | //按位或 ^ //按位异或 ~ //按位取反 注: 它们的操作数必须是整数
4个按位逻辑运算符都用于整型数据,包括char。由于这些操作符的操作都是针对二进制得每一位,故叫做:位操作符。后面我们还会将逻辑操作符(&&和||和!),请大家注意不要将他们混淆。
4.1 按位与:&
&操作符通过逐位比较两个运算对象,然后生成一个新值。对于每个位,只有两个对象中相应位置都为1的时候,结果才为1,其余情况下均为0。比如:
//(10010011)&(01011001) 10010011 01011001 00010001
4.2按位或: |
| 操作符,对于每个位,如果两个运算对象中相应位有一个值为1,那么结果便为1,只有都是0的时候结果才是0。比如:
//(10010011)&(01011001) 10010011 01011001 11011011
4.3按位异或:^
^操作符,对于每个位,如果两个运算对象中相应的位中,其中一个为1,而另一个为0,只有在这种情况下,结果才是1。比如:
//(10010011)&(01011001) 10010011 01011001 11001010
4.4按位取反:~
按位取反是一个一元运算符,它的操作数只有一位。~运算符将1变为0,把0变做1。比如:
~(10101010) 10101010 01010101
5.赋值操作符
赋值操作符是一个很棒的操作符,它可以让你得到一个之前不是很满意的值。也就是你可以重新赋值。
int weight = 120;//体重
weight = 100; //不满意就赋值
double salary = 2000;//工资
salary = 20000; //不满意就赋值
赋值操作符可以连续使用,比如:
int a = 10;
int x = 0;
int y = 20;
a = x = y + 1;
//这样的代码感觉怎么样?
//那同样的语义,你看看:
x = y + 1;
a = x;
//这样的写法是不是更加简洁并且易于调试
复合操作符
+= -= *= /= %= >>= <<= &= |= ^=
这些操作符都可以写成复合的效果,比如:
int x = 10;
x = x + 10;
x += 10