exercise2-1

Write a program to determine the ranges of char,short,int,and long variables,both singed and unsinged.by printing appropiate values from standard headers and by direct computation.Harder if you compute them:determine the ranges of the various floating-point types.

 

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

main()
{
        printf("singed char min:%d\n", SCHAR_MIN);
        printf("singed char max:%d\n", SCHAR_MAX);
        printf("singed short min:%d\n",SHRT_MIN);
        printf("singed short max:%d\n",SHRT_MAX);
        printf("singed int min:%d\n",INT_MIN);
        printf("singed int max:%d\n",INT_MAX);
        printf("singed long min:%ld\n",LONG_MIN);
        printf("singed long max:%ld\n",LONG_MAX);

        printf("unsinged char max:%u\n",UCHAR_MAX);
        printf("unsinged short max:%u\n",USHRT_MAX);
        printf("unsinged int max:%u\n",UINT_MAX);
        printf("unsinged long max:%lu\n",ULONG_MAX);
}

                                                                                                                                                      
"check.c" 19 lines, 571 characters

……………………………………………………………………………………………………………………singed char min:-128
singed char max:127
singed short min:-32768
singed short max:32767
singed int min:-2147483648
singed int max:2147483647
singed long min:-2147483648
singed long max:2147483647
unsinged char max:255
unsinged short max:65535
unsinged int max:4294967295
unsinged long max:4294967295

……………………………………………………………………………………………………………………

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

main()
{
        printf("singed char min:%d\n",-(char)((unsigned char)~0 >>1));
        printf("signed char max:%d\n",(char)((unsigned char)~0>>1));
        printf("signed short min:%d\n",-(short)((unsigned short)~0 >>1));
        printf("signed short max:%d\n",(short)((unsigned short)~0 >> 1));
        printf("signed int min:%d\n",-(int)((unsigned int)~0 >> 1));
        printf("signed int max:%d\n",(int)((unsigned int)~0 >> 1));
        printf("signed long min:%ld\n",-(long)((unsigned long)~0 >>1));
        printf("signed long max:%ld\n",(long)((unsigned long)~0 >> 1));

        printf("unsigned char max:%u\n",(unsigned char)~0);
        printf("unsigned short max:%u\n",(unsigned short)~0);
        printf("unsigned int max:%u\n",(unsigned int)~0);
        printf("unsigned long max:%lu\n",(unsigned long)~0);
}
~                                                                              
~                                                                              
~                                                                              
~                                                                              
"check3.c" 19 lines, 776 characters

 

singed char min:-127
signed char max:127
signed short min:-32767
signed short max:32767
signed int min:-2147483647
signed int max:2147483647
signed long min:-2147483647
signed long max:2147483647
unsigned char max:255
unsigned short max:65535
unsigned int max:4294967295
unsigned long max:4294967295

先把数字0的各位二进制转换为1;

然后将结果转换为unsigned 类型;

再把这个unsigned XX类型的值右移一位,清楚符号位;

最后再转化为相应的XX类型。

这一系列的结果最终得到signed类型的最大值。

 

由上述两个程序的结果对比可知:第二个程序中signed类型的负的最小值应该还要-1才是准确的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值