shortint int longint char ,unsigned的取值范围,float的取值

<2016> 同时被 2 个专栏收录
43 篇文章 0 订阅
13 篇文章 0 订阅

计算方法:
以8bit为例,有符号的数占用了一个符号位,只有7位数值,正数范围在2^7-1,负数范围在2^8,因为负数根据补码表示的,补码就是-1=127-128,补码是127,-0=128-128,补码是128,一共可以表示的补码是0-128,所以负数的范围也是-128-0。
无符号数据,则是全部用来做数据,有2^8。

#include "stdafx.h"
#include<ctype.h>
#include<stdio.h>
#include "limits.h"
#include "float.h"
/* atof: convert string s to double */
#define MAXLINE 100
/* rudimentary calculator */
int main()
{
    short smax = SHRT_MAX;
    short smin = SHRT_MIN;
    unsigned short int usmax = USHRT_MAX;
    printf("shor int %d \t %d\t unsigned shortmax%d\n", smax, smin,usmax);

    int imax = INT_MAX;
    int imin = INT_MIN;
    unsigned int uimax = UINT_MAX;
    printf("int %d \t %d\t unsigned intmax%u\n", imax, imin,uimax);
    //%d有符号,%u无符号

    long int lmax =LONG_MAX;
    long int lmin =LONG_MIN;
    unsigned long int ulmax=ULONG_MAX;
    printf("long int%d \t %d\t unsigned longmax%u\n", lmax, lmin,ulmax);

    char cmax = CHAR_MAX;
    char cmin = CHAR_MIN;
    char cbit = CHAR_BIT;
    unsigned char ucmax = UCHAR_MAX;
    printf("char %d \t %d\t%d\t unsigned charmax%d\n", cmax, cmin,cbit,ucmax);

    float fmax = FLT_MAX;
    float fmin = FLT_MIN;
    printf("float %f\t%f\n", fmax, fmin);//用十进制表示
    printf("float %e\t%e\n", fmax, fmin
);//用科学表示指数

              return 1;

}

float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位) 8bits(指数位) 23bits(尾数位)
0 00000000 00000000000000000000000
符号 指数 尾数

double:
1bit(符号位) 11bits(指数位) 52bits(尾数位)
于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值