zoukankan      html  css  js  c++  java
  • 【学习笔记】【C语言】类型说明符

    1. short和long

    clip_image002

    1> short和long可以提供不同长度的整型数,也就是可以改变整型数的取值范围。在64bit编译器环境下,int占用4个字节(32bit),取值范围是-231~231-1;short占用2个字节(16bit),取值范围是-215~215-1;long占用8个字节(64bit),取值范围是-263~263-1

    2> 总结一下:在64位编译器环境下,short占2个字节(16位),int占4个字节(32位),long占8个字节(64位)。因此,如果使用的整数不是很大的话,可以使用short代替int,这样的话,更节省内存开销。

    3> 世界上的编译器林林总总,不同编译器环境下,int、short、long的取值范围和占用的长度又是不一样的。比如在16bit编译器环境下,long只占用4个字节。不过幸运的是,ANSI ISO制定了以下规则:

        short跟int至少为16位(2字节)

        long至少为32位(4字节)

        short的长度不能大于int,int的长度不能大于long

        char一定为为8位(1字节),毕竟char是我们编程能用的最小数据类型

    4> 可以连续使用2个long,也就是long long。一般来说,long long的范围是不小于long的,比如在32bit编译器环境下,long long占用8个字节,long占用4个字节。不过在64bit编译器环境下,long long跟long是一样的,都占用8个字节。

    5> 还有一点要明确的是:short int等价于short,long int等价于long,long long int等价于long long

     

    2. signed和unsigned

    1> 首先要明确的:signed int等价于signed,unsigned int等价于unsigned

    2> signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数。

        signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0。其实int的最高位本来就是符号位,已经包括了正负数和0了,因此signed和int是一样的,signed等价于signed int,也等价于int。signed的取值范围是-231 ~ 231 - 1

        unsigned:表示无符号,也就是说最高位并不当做符号位,所以不包括负数。在64bit编译器环境下面,int占用4个字节(32bit),因此unsigned的取值范围是:0000 0000 0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 1111 1111,也就是0 ~ 232 – 1

    3.代码

     1 #include <stdio.h>
     2 /*
     3  int 4个字节  %d
     4  short 2个字节 %d
     5  long 8个字节  %ld
     6  long long 8个字节 %lld
     7  
     8  
     9  signed
    10  unsigned  %u
    11  */
    12 int main()
    13 {
    14     // 0000 0000 0000 0000 0000 0000 0000 0000
    15     // 2的31次方-1
    16     // 2的32次方-1
    17     int num;
    18     
    19     /*
    20      signed和unsigned的区别:
    21       signed 最高位要当做符号位
    22      unsigned 最高位不要当做符号位
    23     */
    24     // signed == signed int
    25     // signed 有符号:正数、0、负数
    26     signed int a = 10;
    27     signed a2 = 10;
    28     
    29     // unsigned int == unsigned
    30     // unsigned 无符号:0、正数
    31     unsigned int b = 10;
    32     unsigned b2 = 10;
    33     
    34     long unsigned int c = 34343;
    35     long unsigned c2 = 423432;
    36     
    37     short unsigned int d = 4343;
    38     short unsigned d2 = 43243;
    39     
    40     short signed int e = 54354;
    41     short signed e2 = 434;
    42     
    43     
    44     
    45     
    46     return 0;
    47 }
    48 
    49 void longAndShort()
    50 {
    51     // long == long int
    52     long int a = 100645654654645645l;
    53     long a2 = 100645654654645645l;
    54     
    55     // long long int == long long
    56     long long int c = 100645654654645645ll;
    57     long long c2 = 4535435435435ll;
    58     
    59     // short == short int
    60     short int d = 5454;
    61     short d2 = 43434;
    62     
    63     //printf("%lld
    ", c);
    64     
    65     int s = sizeof(long long int);
    66     printf("%d
    ", s);
    67 }
  • 相关阅读:
    关于拷贝构造函数和赋值运算符
    笔试题(转)
    Pro *C/C++学习笔记(一)
    __cdecl
    Visual Studio 2010中C++的四大变化(转)
    小小递归函数的执行过程
    stl string常用函数
    【C/C++ string】之strcpy函数
    409 Excuses, Excuses!
    10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/dssf/p/4587310.html
Copyright © 2011-2022 走看看