操作符分为以下几类:
(1)算术操作符:+ - * / %(取模)
(2)移位操作符:<< 和 >>
(3)位操作符:& | ^
(4)赋值操作符:=
(5)单目操作符:! - + & – ++ ~ * (类型) sizeof
(6)关系操作符::> < == >= <= !=
(7)逻辑操作符:&& ||
(8)条件操作符:表达式?表达式1:表达式2
(9)逗号表达式:表达式1,表达式2,……,变大时n
(10)下标引用、函数调用和结构成员:[ ] ()
下面我将逐个对其进行介绍,首先是
1.算术操作符
+ - * / %
(1).除了%操作符之外。其他的几个操作符可以作用于整数和浮点数。
(2).对于/操作符如果两个操作符都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
(3).%操作符的两个操作符必须为整数。返回的就是整数之后的余数
2.位移操作符
<<左移操作符 >>右移操作符
左移操作符移位规则:
左边抛弃,右边补0
右移操作费移位规则:
算术右移情况指的是:二进制数有正负之分,补位时要注意符号位;
逻辑移位情况指的是:不需要考虑符号产生的问题,直接补0即可。
下面给出一段代码进行举例
#include<stdio.h>
#inlude<windows.h>
int main()
{
int a = 10;
printf("%d\n", a >> 1);
system("pause");
return 0;
}
他的输出结果是5,这里需要特别注意,
1. 移位操作符不能直接赋值改变变量。
如果需要改变变量需要这样输入:a>>=1;
2. 左移操作相当于/2;
右移操作相当于*2。
3.位操作符
&(按位与) |(按位或) ^(按位异或)
他们唯一需要注意的就是他们的操作数必须是整数
4.赋值操作符
赋值操作符在之前的程序代码中经常出现,其操作符有:=、+=等。
注意在连续赋值时,应从右往左赋值。
5.单目操作符
单目操作符有:!(逻辑反操作、非)、&(取地址符)、sizeof(求长度)、~(按位取反)、++、--、*、(类型)等。
需要注意的是:
1. &是取地址符,%p打印地址。
2. sizeof()是操作符,不是函数!
3. ++/--的前置和后置
4. *在这里是间接访问操作符,主要和指针相关。
5. (类型)为强制类型转换操作符,例如强制将浮点型数转化成整型数时:
#include<stdio.h>
#include<windows.h>
int main()//++后置
{
int a = 10, b = 0;
b = a++;
printf("a=%d,b=%d\n", a, b);
system("pause");
return 0;
}
a==11 b==10
#include<stdio.h>
#include<windows.h>
int main()//++前置
{
int a = 10, b = 0;
b = ++a;
printf("a=%d,b=%d\n", a, b);
system("pause");
return 0;
}
a==11 b==11
6.关系操作符
关系操作符主要是:==、>=、<=。
主要出现在条件的比较判断上,如:if语句、for循环等。
7.逻辑操作符
&& (逻辑与) || (逻辑非)
8.条件操作符
exp1 ? exp2 : exp3 ;
int main()
{
int a=10, b=0;
if (a > 5)
b = 3;
else b = -3;
printf("b=%d\n", b);
system("pause");
return 0;
}
转变为条件操作符表达
#include<stdio.h>
int main()
{
int a=10, b=0;
b = a > 5 ? 3 : -3;
printf("b=%d\n", b);
system("pause");
return 0;
}
两种方式得到的结果是相同的。
9.逗号表达式
exp1 , exp2 , exp3 , ········ expN
所谓逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左到右依次执行。整个表达式的结果是最后一个表达式的结果。
10.下表引用,函数调用和结构成员
[ ] 数组下标引用操作符; ( ) 函数调用操作符。
#include<stdio.h>
#include<Windows.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10}
printf("%d\n", arr[4]);
printf("%d\n", *arr+4);
printf("%d\n", *(arr+4));
printf("%d\n", *(4+arr));
printf("%d\n", 4[arr]);
system("pause");
return 0;
}
他们的输出结果是一致的。