【c语言问题系列教程之三】表达式

1.&&和||中的短路原则。

当左边的表达式已经确定了整个表达式的结果,那个右边的表达式不会被执行,即如下程序片段输出及执行结果为:

	int a=0,b=1;
	if(1||a++);
	if(0&&b++);
	printf("a=%d\nb=%d\n",a,b);

2.为什么下面的代码不对?

int a=1000,b=1000;
long int c=a*b;
因为乘法是用int进行的,而其结果可能会在提升或赋给左边的long int型之前溢出或被截短。

所以应该以long int型进行乘法运算,可以为下面的两种形式:

long int c=(long int)a*b;
或 long int c=(long int )a*(long int)b;
但不能为下面的形式:

long int c=(long int)(a*b);
读者如果不明白c语言中的类型转换规则和时机,可以参考 c语言类型转换
3.为什么如下程序中无论degF取什么值,degC的值总是0?

double degC,degF;
degC=5/9*(degF-32);
printf("degC=%f\n",degC);
如果二元操作符的两个操作数都是整数,则C语言进行整数运算,这与表达式的其余部分的类型无关。如果想进行浮点数运算,可以参考该章问题2,或者改为下式:

degC=5.0/9*(degF-32);

4.如下代码是可以编译运行的,为什么?

int a,b,c,d;
a?b=c:d;
在c语言原来的定义中,=的优先级是低于?:的。读者如果不清楚ANSI/ISOC标准的表达式顺序,可以参考 c语言表达式运算顺序






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值