操作符
C语言中,操作符是一种对数据进行处理的指令/符号。
操作符主要有以下几类:
1.算术操作符
+ //加
- //减
* //乘
/ //除
% //取余(或称取模)
其中,取余符号“%”表示取两个数相除的余数。
2.移位操作符
移位操作符有:
>> n//对数据的二进制形式向右移动n位
<< n//对数据的二进制形式向左移动n位
移位操作符移动的是二进制数字的数位。
在计算机中,数值是用一串二进制代码记录的。
一位二进制数字为一比特(bit),八比特为一字节(byte)。
一个整型占用4个字节,在计算机中,整型a = 2实际表示为:
00000000000000000000000000000010
移位操作符对这些二进制数字进行操作。
int main()
{
int a = 2;
int b = a << 1; //使a的二进制数字向左移动一位
printf("%d",b); //输出4
return 0;
}
3.位操作符
& //按位与
| //按位或
^ //按位异或
暂无介绍,还未学习。
4.赋值操作符
赋值操作符为对变量进行赋值的操作符
= //赋值
+= //复合赋值加
-= //复合赋值减
*= //复合赋值乘
/= //复合赋值除
//等等
复合赋值与一般的加减乘除是等效的
int main()
{
int a = 5;
a = a + 5;
printf("%d\n",b); //输出10
int b = 5;
b += 5; //与b=b+5是等效的
printf("%d",b); //输出10
return 0;
}
5.单目操作符
只对一个操作数(称为“目”)进行操作的操作符叫做单目操作符。
这也就是说,上述的赋值操作符、移位操作符都为双目操作符。
单目操作符有:
! //逻辑反操作
- //表示负数
+ //表示正数
& //取地址
sizeof //求操作数的长度
~ //对一个数的二进制数按位取反
++ //加一,分为前置和后置
-- //减一,分为前置和后置
* //间接访问操作符
(类型) //强制类型转换
其中,&、~和*这三个操作符暂不学习。
!:逻辑反操作,将假变为真,或将真变为假。
在C语言中,逻辑判断有两个概念叫:
true(真)和false(假),这是逻辑判断的条件。
C语言规定,数值0表示假,非0表示真。逻辑反操作即是将非0的数转为0,而将为0的数转为1(默认的值)。
int main()
{
int a = 10;
int b = !a;
printf("%d",b); //输出0
return 0;
}
sizeof:计算数据的大小。
当计算一个数据类型时,sizeof必须加()。
printf("%d",sizeof(int));
当计算一个已经定义好的非数组的变量的大小时,sizeof可以直接使用。
int a = 5;
printf("%d",sizeof a);
当计算一个数组的大小时,sizeof仍需要加()。
int arr[10] = { 0 }; //创建一个未初始化的数组
printf("%d",sizeof(arr)); //输出40
sizeof输出40的原因为:在整型数组arr中,有10个整型元素,每个整型元素占用4字节,总和便为40字节。sizeof计算的是字节长度,因此这里输出40。
同样的,数组中的单个元素也能进行长度的计算:
int arr[10] = {0};
printf("%d",sizeof(arr[8])); //输出单个int类型的长度
++和- -:使数加1或减1,分为前置和后置。
前置++是指先让数加1,然后再使用该值
后置++是指先使用数值,然后数值自己再加1
与一些赋值运算不同的是,++和- -都会影响到所使用的数,无论其在什么位置。
int main()
{
int a = 5;
int b = a + 5;
printf("%d\n", b );
printf("%d\n", a ); //输出5,表明a的值没有改变
int c = 5;
int b = ++c; //使c加1后,再将值赋给b
printf("%d\n", c); //输出6,表明c的值有改变
printf("%d\n", b); //输出6
return 0;
}
同理,如果是后置运算:
int a = 5;
int b = a++; //先将值赋给b,再让a加一
printf("%d", b); //输出5
printf("%d", a); //输出6
(类型):强制类型转换。是将一个变量强制进行类型转换的操作符。
int main()
{
float a = 3.14;
int b = (int)a; //将a强制转换为整型,丢失小数位的数字
printf("%d",b); //输出3
return 0;
}
6.关系操作符:对两个变量的关系的描述,用于逻辑判断。
== //等于
> //大于
< //小于
>= //大于等于
<= //小于等于
!= //不等于
当两个变量满足关系操作符的条件时,输出1(表示真),不满足时输出0(表示假)
int main()
{
int a = 5;
int b = 6;
printf("%d\n", a > b); //a并不大于b,所以输出0
printf("%d", a < b); //输出1
return 0;
}
7.逻辑操作符:也是进行逻辑判断的一种操作符
! //逻辑非
&& //逻辑与
|| //逻辑或
!:逻辑非,如果表达式为真,则将其转为假,输出0。如果表达式为假,则将其转为真,输出1。通常位于表达式前面
&&:逻辑与,当左右两边的条件都为真时,输出1。否则,输出0。
||:逻辑或,当左右两边的条件至少有一个为真时,输出1。全为假时才输出0。
8.条件操作符:进行逻辑判断的一种操作符,又称三目操作符、条件表达式。
只有一个,结构为:
exp1 ? exp2 : exp3
exp1、exp2、exp3均代指一个表达式。
当表达式exp1为真时,进行exp2给出的运算,此时exp2的值为整个表达式的值。
当表达式exp2为假时,进行exp3给出的运算,此时exp3的值为整个表达式的值。
在优先级上,除赋值操作符以外,该操作符的优先级低于上文所有的操作符。
int main()
{
int a = 5;
int b = 6;
a > b ? printf("%d\n", a):printf("%d", b); //输出6
return 0;
}
9.逗号表达式:由逗号隔开的一串表达式。
是将多个运算压缩在一起的操作符。
逗号表达式是从左到右依次进行运算的。
整个逗号表达式的结果即为最后一个表达式的结果
int main()
{
int a = 5;
int b = 6;
int c = 8;
int d = (b = a + 5, a = b + c, c = a + b); /*
进行多次运算,将最后一个表达式的结果c赋值给d*/
printf("%d", d); //输出28
return 0;
}
10.其它操作符:还有一些零碎的操作符。
[] //下标引用操作符。数组的调用均使用该操作符
() //函数调用操作符。函数的使用均需要该操作符
. //结构成员
-> //结构成员
* //解引用操作符
& //取地址操作符