zoukankan      html  css  js  c++  java
  • C语言数据类型取值范围解析

      为什么int类型的取值范围会是-2^31 ~ 2^31-1  ,为什么要减一呢?
    计算机里规定,8位二进制为一个字节,拿byte来说,一个BYTE类型的数据是占1BYTE(字节)的,那么他的取值范围为:00000000~11111111转换成10进制就是0到255,同样一个2BYTE的short int类型,他可装的为16位二进制即:0000000000000000~1111111111111111,也就是10进制的0~65535但是short类型他是有正负之分的,那么怎么表示负数呢?就是判断最高位,当最高位为0则为正,为1则为负。即:1000000010110001就是一个负数。其他的以此类推……
     
    这个1是代表0这个数的个数,因为0为1吗,且0的int类型表示为32个0,第一个0代表为表示正负号,所以0可以看成是正数的一个特例。
     
    基本类型包括字节型(char)、整型(int)和浮点型(float/double)。
        定义基本类型变量时,可以使用符号属性signed、unsigned(对于char、int),和长度属性short、long(对于int、double)对变量的取值区间和精度进行说明。
        下面列举了Dev-C++下基本类型所占位数和取值范围:
    符号属性    长度属性  基本型  所占位数    取值范围     输入符举例     输出符举例
    --             --      char     8       -2^7 ~ 2^7-1      %c         %c、%d、%u
    signed         --      char     8       -2^7 ~ 2^7-1      %c         %c、%d、%u
    unsigned       --      char     8        0 ~ 2^8-1        %c         %c、%d、%u
    [signed]     short    [int]     16      -2^15 ~ 2^15-1    %hd
    unsigned     short    [int]     16      0 ~ 2^16-1        %hu、%ho、%hx
    [signed]      --       int      32      -2^31 ~ 2^31-1    %d
    unsigned      --      [int]     32      0 ~ 2^32-1        %u、%o、%x
    [signed]     long     [int]     32      -2^31 ~ 2^31-1    %ld
    unsigned     long     [int]     32     0 ~ 2^32-1         %lu、%lo、%lx
    [signed]   long long  [int]     64     -2^63 ~ 2^63-1     %I64d
    unsigned   long long  [int]     64     0 ~ 2^64-1         %I64u、%I64o、%I64x
      --         --       float     32     +/- 3.40282e+038   %f、%e、%g
      --         --       double    64     +/- 1.79769e+308   %lf、%le、%lg %f、%e、%g
      --        long      double    96     +/- 1.79769e+308   %Lf、%Le、%Lg

    几点说明:
        1. 注意! 表中的每一行,代表一种基本类型。“[]”代表可省略。
        例如:char、signed char、unsigned char是三种互不相同的类型;
    int、short、long也是三种互不相同的类型。可以使用C++的函数重载特性进行验证,如:
        void Func(char ch) {}
        void Func(signed char ch) {}
        void Func(unsigned char ch) {}
    是三个不同的函数。


       2. char/signed char/unsigned char型数据长度为1字节;
       char为有符号型,但与signed char是不同的类型。
    注意! 并不是所有编译器都这样处理,char型数据长度不一定为1字节,char也不一定为有符号型。


        3. 将char/signed char转换为int时,会对最高符号位1进行扩展,从而造成运算问题。
        所以,如果要处理的数据中存在字节值大于127的情况,使用unsigned char较为妥当。程序中若涉及位运算,也应该使用unsigned型变量。


        4. char/signed char/unsigned char输出时,使用格式符%c(按字符方式);或使用%d、%u、%x/%X、%o,按整数方式输出;输入时,应使用%c,若使用整数方式,Dev-C++会给出警告,不建议这样使用。


        5. int的长度,是16位还是32位,与编译器字长有关。
        16位编译器(如TC使用的编译器)下,int为16位;32位编译器(如VC使用的编译器cl.exe)下,int为32
    位。

     
  • 相关阅读:
    flex产生水平滚动条
    js中的类
    typescript
    vue练习
    vue-cli2脚手架搭建
    Luogu P1970 花匠
    Luogu P1311 选择客栈
    Luogu P1016 旅行家的预算
    Luogu P1144 最短路计数
    Luogu P1091 合唱队形
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6170310.html
Copyright © 2011-2022 走看看