c语言学习笔记(运算符)

1、最高级:出现同级别运算符时的结合方向是从左往右(下面级别没写结合顺序时,默认是从左往右)。

( )圆括号

[ ]下标运算符号

->指向结构体成员运算符

.结构体成员运算符

2、第二级:!、~、++、--、-、(类型)、*、&、sizeof。

这一级都是单目运算符号,这一级的结合方向是从右向左。

比如出现*p++,这时*和++同级别,先算右边,再左边。

所以*p++等价于*(p++),而不是(*p)++。

3、第三级:+、-、*、/、%

这一级都是算术运算符,结合顺序和数学学习中一致的,先乘除取余数,后加减。

4、第四级:<<、>>

这是左移、右移运算符,位运算时可能需要用到。
 

5、第五级:<、<=、>、>=、!=、==

这些运算符也称为关系运算符,其中<、<=、>、>=高于!=、==。
 

6、第六级:&、^、|

这三个符号也是位运算符号,其中内优先级,&>^>|。



7、第七级:&&、||

逻辑与&&优先级大于逻辑或||。



8、第八级:?  :

也称为条件运算符号,是C语言中唯一的一个三目运算符,结合顺序是从右往左。



9、第九级:=、+=、-+、*=、/=、%=

这些运算符也叫做赋值运算符,除此之外,>>=、<<=、&=、^=、|=这些赋值运算符也在这一级别内,结合顺序是从右往左。

10、最低级:,

逗号运算符也称为顺序求值运算符,在C语言中,运算级别最低。
 

操作数、运算符、左值、右值

操作数:程序操纵的数据实体,该数据可以是数值、逻辑值或其它类型。可以是常量也可以是变量

根据运算符可操作的操作数个数,可以将运算符分为一元,二元,三元运算符

左右值:赋值符号'=' ,左边的为左值,右边的为右值

如果是左值,就既可以赋值也可以取值,如果只有右值那么就只能取值而不能赋值

如c 只有左值,那么你可以把c赋给别人如  b = c + 1;

也可以赋值  c = 100;

但定义时如果加了const 就不一样了,const int x = 100;

那么此时x就只有右值

而100 只有右值,你不能放在左边,100 = 20;//就不能这样

所有的*=    /=    %=    +=   的优先级要比加减乘除的优先级低多了

int a = 3 , b = 4, c = 5 ;

a *= b + 5;  // a = a * ( b + 5 )

?:   三目运算符

三目运算符:表达式1?表达式2:表达式3         (如果表达式1为真则取表达式2的值,否则取表达式3的值)

主要就是用这个代替一些简单的if语句

int main()
{
	int a = 0, b = 0;
	int max = 0;
	scanf("%d %d", &a, &b);
	if (a > b)
	{
		max = a;
	}
	else
	{
		max = b;
	}
	printf("max = %d\n", max);
	return 0;
}

而如果用三目运算符的话就会快很多

int main()
{
	int a = 0, b = 0;
	int max = 0;
	scanf("%d %d", &a, &b);
	max = a > b ? a : b;
	printf("max = %d\n", max);
	return 0;
}

自增自减(非常重要)

在所有运算符中只有自增、自减运算符(i++,++i,i--,--i  等)有回写的能力

int main()
{
	int a = 10, b = 10;
	int x = 0;
	x = ++a;      //第一步
	printf("x = %d a = %d\n", x, a);
	x = b++;      //第二步
	printf("x = %d b = %d\n", x, b);
	return 0;
}

第一步 :把++a 赋值给x  

首先是把a的值取出来,放入临时的空间中;再对a的值自增1;自增1后,把11回写给a,此时a的值变成了11,再接着把a的值赋给x 

最后输出的结果是x = 11  a = 11

第二步:把b++的值赋给x

首先把b的值取出来直接赋给x;再把b的值取出来放在临时空间中,自增1,再把11回写给b

所以打印的结果是x = 10 b = 11

这两个要注意区分

但如果仅仅是简单的进行a++或++a,而不进行赋值时,这两个变量没什么区别,可以互换

如  for 循环中 for (int i = 0;i < n ;++i)    把for循环中的++i 替换成i++ 其实也可以

如果是对小数进行自增自减,只能在整数位上面实现

float ft = 12.23;

++ft;

printf("%f \n", ft);

打印出来的ft = 13.23

由于自增自减有回写能力,所以不能对常量进行自增自减

100++;  不能这样写,因为100是个右值,只能读取不能写,而自增在把数读取加加后会把值回写给100,但100不可写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值