今天主要给大家带来的是操作符详解,主要包括算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号操作符。
1.算术操作符
算术操作符包括 + - / * %
我们写一个计算器代码来详细解释一下,代码如下:
#include<stdio.h> int main() { int a=10, b=3; int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0; num1 = a + b; num2 = a - b; num3 = a * b; num4 = a / b; num5 = a % b; return 0; }
在代码中我们可以清楚看到操作符的应用, 注意在% 操作符的两个操作数必须为整数。返回的是整除之后的余数,故被除数是浮点型的时候我们需要强制转换类型转换为整形。
2.移位操作符
移位操作符包括<<和>>
<<是左移,是将整形数据的补码向左移一位右边补0;
>>是右移,是将整形数据的补码向右移动一位,其中包括逻辑右移补0和算术右移补符号位。
代码如下:
#include<stdio.h> int main() { int num = 10; printf("%d\n",num << 1); printf("%d\n", num >> 1); return 0; }
对于num<<1,我们先写出num的二进制位00000000000000000000000000001010,正数原码补码反码相同,左移00000000000000000000000000010100,是正数原码补码反码相同为20.对于num>>,我们先写出num的二进制位00000000000000000000000000001010,正数原码补码反码相同,右移00000000000000000000000000000101(我们是按照算数右移来计算)正数原码补码反码相同,得到为5.注意移位时需要移动正整数位不能移动负数位,而且num必须为整数。
3.位操作符
& 按位与(补码全为1为1,否则为0)
| 按位或(补码有1为1,否则为0)
^ 按位异或(相同为0,不同为1)
其中操作数必须为整数
对于按位异或我们可以得到两个相同的数异或为0,一个数和0异或还是这个数,故我们可以得到不使用第三个变量来交换两个数,代码如下:
#include<stdio.h> int main() { int a = 2, b = 10; a = a ^ b; b = a ^ b; a = a ^ b; printf("a=%d,b=%d", a, b); return 0; }
能进行交换的原因是异或遵循交换律,再根据据 两个相同的数异或为0,一个数和0异或还是这个数,即可完成交换。
4.赋值操作符
赋值操作符也即是 = ,+= , -= , *= , /= , %=由于常用这些操作符这里不详细讲解。
5. 单目操作符
* 间接访问操作符(解引用操作符) (类型) 强制类型转换 |
对于!我们可以理解为非例如!0也就是非0,对于sizeof,代码如下
#include<stdio.h> int main() { int arr[5] = { 1,2,3,4,5 }; printf("%d\n", sizeof(arr)); printf("%d\n", sizeof(arr[0])); printf("%d\n", sizeof(arr)/sizeof(arr[0])); return 0; }
运行后
由于sizeof单位是字节,我们也可以得到数组中有多少元素。
对于++和--,都分为前置和和后置,对于前置++a就是先让a加1再进行操作,后置a++就是先操作a再让a加1.对于前置和后置的结果都是让a加1.
6.关系操作符
> 大于
< 小于
== 等于
>= 大于等于
<= 小于等于
!= 不等于
7.逻辑操作符
&& 且
|| 或
例如我们想要表示0<=a<=2,需要用到&&,具体是a<=1&&a>=0.对于a<1且a>2,则需要用到||,具体为a<1||a>2.
8.条件操作符
表示为 exp1 ? exp2 : exp3
先判断exp1的真假,真则返回exp2的值,假返回exp3的值
例如代码
#include<stdio.h> int main() { int a = 0; a = 30 > 20 ? 1 : 2; printf("%d", a); return 0; }
运行结果为
9.逗号操作符
表达式为 exp1, exp2, exp3, …expN
从第一个表达式开始到最后一个表达式,最后返回最后一个表达式的值,
代码如下;
#include<stdio.h> int main() { int a = 1; int b = 2; int c = (a > b, a = b + 10, a, b = a + 1); printf("%d\n", a); printf("%d\n", b); printf("%d\n", c); return 0; }
运行结果如下
故我们可以得到在运算的过程中各个变量的值也会改变。 、
本次内容到此结束,希望大家可以一键三连。