关于C语言的学习笔记#5

操作符

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.其它操作符:还有一些零碎的操作符。

[] //下标引用操作符。数组的调用均使用该操作符
() //函数调用操作符。函数的使用均需要该操作符
. //结构成员
-> //结构成员
* //解引用操作符
& //取地址操作符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值