该死的运算符

        运算符根据操作数的多少大体上可以分成三类,单目、双目以及三目,也就是说运算符的单目与双目取决于有多少个操作数。

        操作数,也就是参与运算的数,比如1+1,这里面就有两个操作数,而 + 也就是双目运算符。

        从功能上分类,运算符分为算数运算符,逻辑运算符,关系运算符和赋值运算符。

        如下图所示,优先级可以简单记为

        单目运算符>算数运算符>移位操作符>关系操作符>比较运算符>位操作符>逻辑操作符>赋值操作符 

        在进行复杂运算时,确定好优先级之后,根据关联规则进行求值运算。

        大部分的运算顺序都是从左往右,少部分则会反过来,部分不太好记的会在实验中展示。

 零碎知识整理

        以下提到的知识点会在实验中进行验证。

        当操作数的数据类型不同时,编译器会将占用内存小的类型转换为大的类型,比如int转换成float类型会强制转换,在要转换的操作数前面加上(要转换的类型),如:(int)1.0

强制转换会直接去掉小数点后的数字,不会四舍五入。

关系运算符得到的返回值0和1,这是因为关系运算符常用于条件判断。

唯一的三目条件运算符的格式是a1 ? a2 : a3;如果a1的值为非0值,则执行a2,为0则执行a3。

实验演示

        下面代码中,第一个printf演示的是强制占内存大的数据类型转化成小的;第二个是进行默认类型转换;第三个演示了强制大转小是不遵循四舍五入的。

#include <stdio.h>

int main(void)
{
	int a,b,c,d;
	a = 1;
/* 
	a++先执行后运算 
	这里先执行b=a,然后执行a++
	语句执行完成后,b=1,a=2 
*/
	b = a++;
/*
	++a先运算后执行
	先执行++a,后执行c=a
	执行完成后,c=3,a=3 
*/
	c = ++a;
	a += 1;
	
	d = b < c ? a : 0;
/*
	上述等价于注释代码
	if(b < c)
		d = a;
	else
		d = 0;
*/
	printf("%d\n",1 + (int)3.14);
	printf("%f\n",1 + 3.14);
	printf("%d\n",1 + (int)0.8);
	printf("a = %d\nb = %d\nc = %d\n",a,b,c);
	printf("d = %d\n",d);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值