C语言学习(五)运算符、表达式和语句

本文介绍了C语言中的运算符、表达式和语句,包括基本运算符如算术运算、求模运算,以及sizeof运算符、类型转换和函数参数。特别讨论了类型转换中的自动升级、降级以及强制类型转换,强调了类型匹配和序列点的重要性,以避免潜在的编程陷阱。
摘要由CSDN通过智能技术生成
5.2 基本运算符

基本算术运算的运算符: =、 +、 -、 *和/

C 没有指数运算符。不过, C 的标准数学库提供了一个pow()函数用于指数运算。 例如, pow(3.5,
2.2)返回3.5的2.2次幂) 。

C使用符号/来表示除法。 /左侧的值是被除数, 右侧的值是除数。 例如, 下面four的值是4.0:

four = 12.0/3.0;

整数除法和浮点数除法不同。 浮点数除法的结果是浮点数, 而整数除法的结果是整数。 整数是没有小数部分的数。 这使得5除以3很让人头痛, 因为实际结果有小数部分。 在C语言中, 整数除法结果的小数部分被丢弃, 这一过程被称为截断(truncation) 。

运行程序清单5.6中的程序, 看看截断的情况, 体会整数除法和浮点数除法的区别。

/* divide.c -- 演示除法 */
#include <stdio.h>
int main(void)
{ 
printf("integer division: 5/4 is %d \n", 5 / 4);
printf("integer division: 6/3 is %d \n", 6 / 3);
printf("integer division: 7/4 is %d \n", 7 / 4);
printf("floating division: 7./4. is %1.2f \n", 7. / 4.);
printf("mixed division: 7./4 is %1.2f \n", 7. / 4);
return 0;
}

程序清单5.6中包含一个“混合类型”的示例, 即浮点值除以整型值。 C相对其他一些语言而言, 在类型管理上比较宽容。 尽管如此, 一般情况下还是要避免使用混合类型。 该程序的输出如下:

integer division: 5/4 is 1
integer division: 6/3 is 2
integer division: 7/4 is 1
floating division: 7./4. is 1.75
mixed division: 7./4 is 1.75

注意, 整数除法会截断计算结果的小数部分(丢弃整个小数部分) , 不会四舍五入结果。 混合整数和浮点数计算的结果是浮点数。 实际上, 计算机不能真正用浮点数除以整数, 编译器会把两个运算对象转换成相同的类型。
本例中, 在进行除法运算前, 整数会被转换成浮点数。

在C99以前,不同的实现采用不同的方法。 但是C99规定使用趋零截断。 所以, 应把-3.8转换成-3

5.3.1 sizeof运算符和size_t类型

sizeof运算符以字节为单位返回运算对象的大小(在C中, 1字节定义为char类型占用的空间大小。 过去, 1字节通常是8位, 但是一些字符集可能使用更大的字节) 。 运算对象可以是具体的数据对象(如, 变量名) 或类型。 如果运算对象是类型(如,float) , 则必须用圆括号将其括起来。

// sizeof.c -- 使用sizeof运算符
// 使用C99新增的%zd转换说明 -- 如果编译器不支持%zd, 请将其改成%u%lu
#include <stdio.h>
int main(void)
{ 
int n = 0;
size_t intsize;
intsize = sizeof (int);
printf("n = %d, n has %zd bytes; all ints have %zdbytes.\n",
n, sizeof n, intsize);

C语言规定, sizeof 返回 size_t 类型的值。 这是一个无符号整数类型,但它不是新类型。size_t是语言定义的标准类型。 C有一个typedef机制, 允许程序员为现有类型创建别名。 例如,

typedef double real;

这样, real就是double的别名。 现在, 可以声明一个real类型的变量:

real deal; // 使用typedef

编译器查看real时会发现, 在typedef声明中real已成为double的别名, 于是把deal创建为double 类型的变量。
类似地, C 头文件系统可以使用 typedef把 size_t 作为 unsigned int 或unsigned long的别名。
这样, 在使用size_t类型时, 编译器会根据不同的系统替换标准类型。

C99 做了进一步调整, 新增了%zd 转换说明用于 printf()显示 size_t 类型的值。 如果系统不支持%zd, 可使用%u或%lu代替%zd。

5.3.2 求模运算符: %

例如, 13 % 5(读作“13求模5”)得3
求模运算符只能用于整数, 不能用于浮点数。

min = sec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值