C 基本数据类型的取值范围

C 输出基本数据类型的取值范围(exercise 2-1)

编写一个程序确定各种变量类型的取值范围包括有符号signed和无符号unsigned的 char 字符型, short 短整型, int 整型, long 长整型。可通过标准的头文件打印出相应的值,也可以直接计算。如果你想计算出浮点型变量的取值范围,难!!!

通过标准头文件输出

#include <stdio.h>
#include <limits.h>

/* 通过标准的头文件输出 */
int main(void)
{
	printf("char(min, max): %d, %d\n", CHAR_MIN, CHAR_MAX);
	printf("short(min, max): %d, %d\n", SHRT_MIN, SHRT_MAX);
	printf("int(min, max): %d, %d\n", INT_MIN, INT_MAX);
	printf("long(min, max): %ld, %ld\n", LONG_MAX, LONG_MIN);

	/* unsigned */
	printf("unsigned char: %u\n", UCHAR_MAX);
	printf("unsigned short: %u\n", USHRT_MAX);
	printf("unsigned int: %u\n", UINT_MAX);
	printf("unsigned long: %lu\n", ULONG_MAX);
	return 0;
}

通过计算输出

这个对我来说就很难了,丝毫没有头绪,只能面向谷歌开发。我找了一个我能看的懂得解法,这个题目的英文解法网站 Copyright © 2016, Senthil Kumaran
。我翻译和解释下。

#include <stdio.h>
/* 实现逻辑是这样的:
	~0 取反操作将所有位都变成 1 
	(~0 will give bits in 1s.)
	(unsigned <type>) 将其转换为无符号类型(最大值出来啦)
	((unsigned <type>) will cast it unsigned.)
	>> 1 右移 1 位移除符号位
	(>> 1 right shifts 1 bit to remove the sign bit.)
	(<type>) 再次将其转换为所需要的类型
	(<type>) casting it the required type again */
int main(void)
{
	/* 如 char 字符型 (unsigned char)~0 >> 1 = 127 
	   -(char)((unsigned char)~0 >> 1) - 1 = -127 - 1 = -128*/
	printf("char(min, max): %d, %d\n", -(char)((unsigned char)~0 >> 1) - 1,
           (char)((unsigned char)~0 >> 1));
    printf("short(min, max): %d, %d\n", -(short)((unsigned short)~0 >> 1) - 1,
           (short)((unsigned short)~0 >> 1));
    printf("int(min, max): %d, %d\n", -(int)((unsigned int)~0 >> 1) - 1,
           (int)((unsigned int)~0 >> 1));
    printf("long(min, max): %ld, %ld\n", -(long)((unsigned long)~0 >> 1) - 1,
           (long)((unsigned long)~0 >> 1));

    /* unsigned */
    printf("unsigned char: %u\n", (unsigned char)~0);
    printf("unsigned short: %u\n", (unsigned short)~0);
    printf("unsigned int: %u\n", (unsigned int)~0);
    printf("unsigned long: %lu\n", (unsigned long)~0);
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值