您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
第二章 数据类型,运算符和表达式04
发布时间:2021-04-07 17:34:32编辑:雪饮阅读()
强制类型转换
#include "stdio.h"
void main(){
float f;
f=5.75;
printf("(int)f:%d,f:%f\n",(int)f,f);
}
这个东西是会丢失精度的。
结合性
优先级都是关于优先级不同的运算符参与运算时先计算谁后计算谁。但是如果运算符的优先级相同,那么先计算谁后计算谁呢?这个就是由“结合性”决定的。
比如1+2×3÷4,乘和除的优先级相同,但是计算的时候是从左往右,即先计算乘再计算除,所以乘和除的结合性就是从左往右。就是这么简单!
一个类型转换导致的异常
可以看到3/4结果竟然是0,这是因为3/4本来两个操作数都是int,%f虽然是浮点型。
这在某些老系统中可能直接就产生类似java的运行时异常了。
这里修改如:
#include "stdio.h"
void main(){
printf("%f\n",3.0/4);
}
这样就不会出现错误了,浮点型与int型运算就不会将结果默认以int存储,就不会丢失精度了。
或者将输出类型也和两个操作数的类型保持一致,例如:
#include "stdio.h"
void main(){
printf("%d\n",4/3);
}
但是这里输出的是1,只能说没有上面出现的那种异常了,但是精度还是没有得到保留。
取余
%运算符是取余运算符,如果被除数比除数小,商是0,余数就是被除数本身
#include "stdio.h"
void main(){
printf("%d\n",3%4);
}
或者下面这个则是余数为2
#include "stdio.h"
void main(){
printf("%d\n",7%5);
}
一个完整的除法表达式包含余数
#include "stdio.h"
void main(){
printf("7/2=%d......%d\n",7/2,7%2);
}
这里第一个%d接收商,第二个%d接收余数
因为7/2两个操作数都是int,当接收输出的是%d即也是int,则是直接将7/2的结果中整数部分取得(直接截取,而不是四舍五入),所以能实现商。
而对于第二个%d接收余数,由于余数本来就只可能是整数,所以正好用%d接收。
关键字词:c,c语言,运算符,表达式
上一篇:数据类型,运算符和表达式03