zoukankan      html  css  js  c++  java
  • 基本数据类型的大小和取值范围

    一、单字节能表示的范围

    (一)无符号单字节

    一个字节有8位,取值范围为0000000011111111,化为十进制即为0255。所以无符号的一个字节可以表示的数字范围为0~255,共256个数。

    (二)有符号单字节

    若有符号,则最高位表示符号位,0表示正号,1表示负号。能表示的正数的最大值为01111111,即十进制的127。能表示的负数的最小值不是11111111,而是10000000。10000000是个特殊的数字,1既表示负号,也参与了运算,化为十进制则为-27 = 128。而11111111则是第二小的数,化为十进制则为-127。
    所以有符号的一个字节可表示的数字范围为-128 ~ 127,共256个数。
    一个字节 = bit。

    二、布尔类型

    可以使用sizeof运算符求出基本数据类型的大小。

    例1

    #include <stdio.h>
    
    int main()
    {
        printf("%d
    ", sizeof(bool));
        return 0;
    }
    

    运行结果:

    1
    

    分析:
    这里可以看出,每个bool变量占一个字节。因为bool只有两个值,true和false,即1和0。所以用一个bit位就足够表示了。这里用一个字节实际上是浪费了内存。但是因为计算机存储数据的基本单位是Byte,不是bit。所以也没什么办法。
    sizeof不是一个函数,而是一个运算符。作用是计算所占内存大小。

    三、字符型

    考虑到A-Z的ASCII码为65-90,a-z的ASCII码为97-122。这两段的数据范围,用一个字节就可以表示。所以每个字符占用一个字节。下面用程序验证一下:

    例2

    #include <stdio.h>
    
    int main()
    {
        printf("%d
    ", sizeof(char));
        return 0;
    }
    

    运行结果:

    1
    

    四、整型

    C和C++中,整型有四种:int、unsigned int、long long、unsigned long long。
    unsigend int和int都占4个字节的内存,区别在于,int带符号的,最高位用来表示符号,0为正1为负;unsigned int不带符号,最高位不表示符号,而是参与运算表示数字。unsigned int可以简写为unsigned。
    int的最大值是01111111,11111111,11111111,11111111,即十进制的231 – 1 = 2 147 483 647。最小值是10000000,00000000,00000000,00000000,00000000,即十进制的-231 = -2 147 483 648。所以int的数据表示范围大概在-21亿到21亿之间。
    unsigned int的最大值是11111111,11111111,11111111,11111111,最小值是00000000,00000000,00000000,00000000,00000000,即十进制的0 ~ 4 294 967 295。

    short int和unsigned short int都占2个字节的内存,区别在于,short int带符号的,最高位用来表示符号,0为正1为负;unsigned short int不带符号,最高位不表示符号,而是参与运算表示数字。
    short int能表示的数据范围为-215 ~ 215 – 1,即-32768 ~ 32767。
    unsigned short int能表示的数据范围为0 ~ 216 – 1,即0 ~ 65535。

    unsigend long long和long long都占8个字节的内存,区别在于,long long带符号的,最高位用来表示符号,0为正1为负;unsigend long long不带符号,最高位不表示符号,而是参与运算表示数字。
    long long能表示的数据范围为-263 ~ 263 – 1。
    unsigned long long能表示的数据范围为0 ~ 264 – 1。

    例3

    #include <stdio.h>
    #include <limits.h>
    
    int main()
    {
        printf("%d
    ", sizeof(int));
    printf("%d
    ", sizeof(unsigned int));
    
        printf("%d
    ", sizeof(short));
    printf("%d
    ", sizeof(unsigned short));
    
        printf("%d
    ", sizeof(long long));
        printf("%d
    ", sizeof(unsigned long long));
    
        printf("%d
    ", INT_MAX);
        printf("%d
    ", INT_MIN);
    
        return 0;
    }
    

    运行结果:

    4
    4
    2
    2
    8
    8
    2147483647
    -2147483648
    

    五、浮点型

    float类型占4个字节,double类型占8个字节。

    例4

    #include <stdio.h>
    
    int main()
    {
        printf("%d
    ", sizeof(float));
        printf("%d
    ", sizeof(double));
    
        return 0;
    }
    

    运行结果:

    4
    8
    

    float能表示的整数范围约为-3.4 * 1038 ~ 3.4 * 1038,精度即有效数字为7位。
    double能表示的整数范围约为-1.79 * 10308 ~ 1.79 * 10308,精度即有效数字为15位。
    虽然float和double能表示的整数范围比int和long long能表示的整数范围大的多,但因为浮点数无法精确表示,所以要表示整数(精确值)时,只能用整型变量来表示,不能使用浮点型变量来表示。



  • 相关阅读:
    vscode安装设置go
    Go开发环境搭建
    使用Docker镜像
    Docker for mac安装
    封装request.get_params批量取值
    Python之日志处理(logging模块)
    Python3 urllib.parse 常用函数示例
    前端之CSS属性相关
    前端之CSS选择器
    前端之CSS介绍
  • 原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/10867091.html
Copyright © 2011-2022 走看看