继基本运算符之后,今天来更新其他运算符
------------------------------------------分割线------------------------------------------
C语言大概有40个运算符,有些运算符常用有些则不常用 ,上期说的是最常用的几个,这期在介绍四个比较常用的。
sizeof运算符和size_t类型
前面曾经介绍过sizeof运算符,是以字节为单位返回运算对象的大小,即字节数。运算对象可以是具体的数据对象(如,变量名)或类型。如果运算对象是类型(如,float),则必须要用圆括号括起来。举个例子:
/*sizeof.c -- 使用sizeof运算符*/
#include <stdio.h>
int main (void)
{
int n = 0;
size_t intsize;
intsize = sizeof (int);
printf("n = %d, n has %u bytes; all ints have %u bytes.\n", n, sizeof n, intsize );
return 0;
}
这个程序就对应了上面所说的运算对象是类型时的用法。
在来解释一下size_t。C语言规定sizefo返回size_t类型的值。这是一个无符号整数类型,但他不是新类型。前面介绍过,size_t是语言定义的标准类型。C有一个typedef机制(至于这是个什么东西,我现在也不清楚,但是后面的章节会讲到,先了解一下就 行)允许程序员为现有类型创造别名。例如:
typedef double real;
编译器查看real时会发现,在typedef声明中real已经成为double的别名,于是把real创建为double类型的变量。类似的,C头文件系统可以使用typedef把size_t作为unsigned int 或unsigned long 的别名。这样,在使用size_t类型时,编译器会根据不同系统替换标准类型。
另外,printf()显示size_t类型的值,书上用的是%zd,在我的电脑上用不了,所以我用了%u,%lu也是可以的,系统不一样,大家可以根据自己的情况调整转换说明。
求模运算符:%
求模运算符只用于整数运算,书上讲的挺复杂,我的理解就是用来算余数的。书上说只能用于整数,用于浮点数会怎么样?有机会可以试试。
先来看书上给出的一个程序示例。
/*min_sec.c -- 把秒数转换成分和秒*/
#include <stdio.h>
#define SEC_PER_MIN 60
int main (void)
{
int sec, min, left;
printf("Convert seconds to minutes adn seconds!\n");
printf("Enter the number of second (<=0 to quit):\n");
scanf("%d",&sec);
while(sec > 0)
{
min = sec / SEC_PER_MIN; //截断分钟数
left = sec % SEC_PER_MIN; //剩下的秒数
printf("%d seconds is %d minute, %d second.\n", sec, min, left);
printf("Enter next value (<=0 to quit):\n");
scanf("%d", &sec);
}
printf("Done!\n");
return 0;
}
看看运行结果:
Convert seconds to minutes adn seconds!
Enter the number of second (<=0 to quit):
666666
666666 seconds is 11111 minute, 6 second.
Enter next value (<=0 to quit):
0
Done!
这个程序用秒数转换成分钟和秒。 先将输入的秒数除以60,得出分钟数(整型除法);再用求模运算符,求出余数。最终得出结果。值得一提的是,程序中的while循环,可以让程序运行多次。当输入秒数<=0时,程序运行结束。
今天高中班主任突然要写一篇作文,很尴尬,作为”优秀毕业生“的我要去赞美母校了,so耻辱断更。。。