C语言:总结C语言中的各种操作符

我们学习C语言,都知道C语言中有好多操作符,那么操作符具体分为哪几类,每一类又有哪些呢?下面来总结一下:

1、算数操作符:+  -  *  /  %(取模)

(1)%(取模)操作符必须是整形,其他的几个操作符还可以作用于浮点型;

(2)对于/  操作符,如果两个操作数都为整数,则执行整数除法,如果有一个操作数为浮点型,则执行的就是浮点型除法。

2、移位操作符:<<(左移)和>>(右移)

(1)<<(左移)移位规则:左边抛弃,右边补0;

  (2)>>(右移)移位规则:

  ①逻辑移位:左边补0,右边丢弃

  ②算数移位:最左边的符号位是啥就补啥{若为0(正数),则补0;若为1(负数),则补1},右边丢弃

 警告:移位时,不要移动负数位,这是c语言标准未定义的。

小知识:移位操作符操作的是计算机内存中的补码;

扫描二维码关注公众号,回复: 2278528 查看本文章

             左移1位有乘以2的效果,相对的,右移1位有除以2的效果;

             浮点数不能进行移位操作。

3、位操作符:& (按位与) | (按位或) ^(按位异或)

(1)&(按位与):对应的二进制有一个为0,则结果为0,同时为1,结果才为1;

(2)| (按位或):有一个为1,则结果为1; 

(3)^(按位异或):相同为0,相异为1。

相关结论:①任何一个数字与1按位与,若结果为1,则最低位为1,否则最低位为0;

                 ②0与a按位异或,结果为a;

                 ③a与a按位异或,结果为0。

PS:他们的操作数必须是整数。

4、赋值操作符:=   +=(复合赋值符)

5、单目操作符:!(逻辑取反) - + &(取地址)  sizeof  (操作数的类型长度)~(按位取反)  ++  --  *  (解应用操作符)  (类型)(强制类型转换)

(1) &(取地址):变量,数组以及函数均可以取地址

如:①&arr表示数组的地址       &arr+1会跳出整个数组的大小之后

      ②arr表示数组首元素的地址   arr+1会跳到数组的第二个元素地址处

(2)sizeof  (操作数的类型长度):

①sizeof(arr)表示求数组的大小,单位为字节;

②sizeof(int)表示整形变量的大小为4字节,如:sizeof(int [9]) 字节大小为36个字节;

③放在sizeof内部的表达式不参与运算,eg:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	short s = 20; 
	int a = 4;
	printf("%d\n", sizeof(s = a + 10));//2
	printf("%d\n", s);//20
	printf("%d\n", a);//4
	system("pause");
	return 0;
}

输出的结果分别为:2;20;4

④sizeof不是函数,而是一个关键字,它后面的括号可以去掉,但是若后面跟的是一个类型,括号就不能去掉。

(3)++a:先增加,后使用

        a++:先使用,后增加

6、关系操作符:> <  >=  <=  !=  ==

注意:在写代码的的过程中要注意不要把赋值=和等于==写错!

7、逻辑操作符:&&  ||

以一个例子来说明:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++&&++b&&d++;
	printf("a=%d\n b=%d\n c=%d\n d=%d\n",a,b,c,d);
	system("pause");
	return 0;
}

程序输出的结果若为:a=1,b=2,c=3,d=4,说明你已经学会了此知识点。

(1)逻辑与&&与按位与&的区别:

逻辑与即判断&&两侧的表达式是否都为真,若都为真,则表达式值为真;

按位与即将两侧的数用二进制展开,对每一位进行与运算(二进制与运算,有一个为0,则结果为0,同时为1,结果为1),最后得到的二进制数字为结果;

逻辑与结果只讲真和假,而按位与得出的是一个真真实实的数。

8、条件操作符:表达式?表达式1:表达式2

(1)若表达式结果为真,则输出表达式1,若为假,则输出表达式2.

9、逗号表达式:表达式1,表达式2,......,表达式n

(1)从左到右依次执行,整个表达式的结果是最后一个表达式的结果。

10、下标引用、函数调用、和结构成员

(1)下标引用[]:

操作数为:数组名arr+索引值

注意:arr[4]和*(arr+4)效果是一样的;*(arr+4)=*(4+arr),arr[4]=4[arr],但是不建议写成*(4+arr)和4[arr].

(2)函数调用操作符()

接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

(3)访问一个结构的成员

结构体.成员名

->结构体指针->成员名

注意:在定义结构体变量时,结构体的类型不能省略

猜你喜欢

转载自blog.csdn.net/qq_42270373/article/details/80629455