C Primer Plus学习_12 其他运算符(上)

本文深入探讨C语言中的sizeof运算符及其返回的size_t类型,并通过实例解析求模运算符的作用及应用。

继基本运算符之后,今天来更新其他运算符

------------------------------------------分割线------------------------------------------

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耻辱断更。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值