C语言算术运算、型态转换

在C 中提供与算术相关的加(+)、减(-)、乘(*)、除(/)的运算子,另外还有一个也常用的余除运算子(%)或称模数(Modulus)运算子,这类以数学运算为主的运算子,称之为算术运算子(Arithmetic operator)。

这类运算子的使用,基本上由左而右进行运算,遇到加减乘除的顺序问题时,也是先乘除后加减,必要时加上括号表示运算的先后顺序,例如这个程式码会在主控台显示7:

printf("%d\n", 1 + 2 * 3);

编译器在读取程式码时,是由左往右读取的,而初学者往往会犯一个错误,例如(1 + 2 + 3) / 4,由于我们习惯将分子写在上面,而分母写在下面的方式,使得初学者往往将之写成了:

printf("%d\n", 1 + 2 + 3 / 4);

这个程式事实上会是1 + 2 + (3 / 4),为了避免这样的错误,在必要的时候可为运算式加上括号。例如:

printf("%d\n", (1 + 2 + 3) / 4);

%运算子是余除运算子它计算除法后的余数,一个例子是,假设有个乱数产生函式为rand(),可以产生正整数乱数,而你却不知道它的最大范围是多少,这时可以如下产生0 到99 的乱数:

printf("%d\n", rand() % 100);

也可以利用%来作循环计数之用,例如由0 计数至9 不断循环:

counter = (counter + 1) % 10;

算术运算子使用不难,但要注意型态转换的问题,请你先看看这段程式会印出什么结果?

int number = 10; 
printf("%d\n", number / 3);

答案不是3.333333,而是3,小数点之后的部份被自动消去了,这是因为numberint整数,而除数3 也是int整数,运算出来的程式被自动转换为int整数了,而为了正确的显示运算的整数结果,还要使用%d格式指定字, 那下面这个程式呢?

double number = 10.0;
printf("%f\n", number / 3);

这个程式的结果会是3.3333,而为了正确的显示运算的整数结果,使用了%f格式指定字,这是C 的隐式型态转换(Implicit type conversion),在一个型态混杂的算式中,长度较长的资料型态会成为目标型态,较小的型态会自动提升为目标型态,因而在上例中3会被提升为3.0 再进行运算,结果就可以显示无误,这样的转换又称算术转换(Arithmetic conversion)。

除了注意隐式型态转换的问题,运算结果输出时,还必须搭配格式指定字,才可以正确的显示最后运算的结果。

在一个指定的动作中,左边的数值会成为目标型态,当右边的数值型态比左边的数值型态长度小时,右边的数值会自动提升为目标型态,例如:

int num = 10;
double number = num;

在上例中,number的值最后会是10.0,在指定的动作时,如果右边的数值型态比左边的数值型态型态长度大时,超出可储存范围的部份会被自动消去,例如将浮点数指定给整数变数,则小数的部份会被自动消去,例子如下,num最后的结果会是3 而不是3.14,而为了显示正确的整数结果,输出时要指定格式指定字%d

int num = 0;
double number = 3.14;
num = number; 
printf("%d\n", num);

在两个整数型态相除时,也可以进行型态转换,将其中一个型态转换至double型态再进行运算,例如:

int number = 10;
printf("%f\n", (double) number / 3);

上例中结果会显示3.3333。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值