精华内容
下载资源
问答
  • C语言常见类型占用字节数

    千次阅读 2018-09-15 23:53:46
    整数是编程中常用的一种数据,C语言通常使用int来定义整数(int 是 integer 的简写),这在《大话C语言变量和数据类型》中已经进行了详细讲解。 在现代操作系统中,int 一般占用 4 个字节(Byte)的内存,共计 32 ...

    整数是编程中常用的一种数据,C语言通常使用int来定义整数(int 是 integer 的简写),这在《大话C语言变量和数据类型》中已经进行了详细讲解。

    在现代操作系统中,int 一般占用 4 个字节(Byte)的内存,共计 32 位(Bit)。如果不考虑正负数,当所有的位都为 1 时它的值最大,为 232-1 = 4,294,967,295 ≈ 43亿,这是一个很大的数,实际开发中很少用到,而诸如 1、99、12098 等较小的数使用频率反而较高。

    使用 4 个字节保存较小的整数绰绰有余,会空闲出两三个字节来,这些字节就白白浪费掉了,不能再被其他数据使用。现在个人电脑的内存都比较大了,配置低的也有 2G,浪费一些内存不会带来明显的损失;而在C语言被发明的早期,或者在单片机和嵌入式系统中,内存都是非常稀缺的资源,所有的程序都在尽力节省内存。

    反过来说,43 亿虽然已经很大,但要表示全球人口数量还是不够,必须要让整数占用更多的内存,才能表示更大的值,比如占用 6 个字节或者 8 个字节。

    让整数占用更少的内存可以在 int 前边加 short,让整数占用更多的内存可以在 int 前边加 long,例如:

    short int a = 10;
    short int b, c = 99;
    long int m = 102023;
    long int n, p = 562131;

    这样 a、b、c 只占用 2 个字节的内存,而 m、n、p 可能会占用 8 个字节的内存。

    也可以将 int 省略,只写 short 和 long,如下所示:

    short a = 10;
    short b, c = 99;
    long m = 102023;
    long n, p = 562131;

    这样的写法更加简洁,实际开发中常用。

    int 是基本的整数类型,short 和 long 是在 int 的基础上进行的扩展,short 可以节省内存,long 可以容纳更大的值。

    short、int、long 是C语言中常见的整数类型,其中 int 称为整型,short 称为短整型,long 称为长整型。

    整型的长度

    细心的读者可能会发现,上面我们在描述 short、int、long 类型的长度时,只对 short 使用肯定的说法,而对 int、long 使用了“一般”或者“可能”等不确定的说法。这种描述的言外之意是,只有 short 的长度是确定的,是两个字节,而 int 和 long 的长度无法确定,在不同的环境下有不同的表现。

    一种数据类型占用的字节数,称为该数据类型的长度。例如,short 占用 2 个字节的内存,那么它的长度就是 2。

    实际情况也确实如此,C语言并没有严格规定 short、int、long 的长度,只做了宽泛的限制:

    • short 至少占用 2 个字节。
    • int 建议为一个机器字长。32 位环境下机器字长为 4 字节,64 位环境下机器字长为 8 字节。
    • short 的长度不能大于 int,long 的长度不能小于 int。


    总结起来,它们的长度(所占字节数)关系为:

    2 ≤ short ≤ int ≤ long

    这就意味着,short 并不一定真的”短“,long 也并不一定真的”长“,它们有可能和 int 占用相同的字节数。

    在 16 位环境下,short 的长度为 2 个字节,int 也为 2 个字节,long 为 4 个字节。16 位环境多用于单片机和低级嵌入式系统,在PC和服务器上已经见不到了。

    对于 32 位的 Windows、Linux 和 Mac OS,short 的长度为 2 个字节,int 为 4 个字节,long 也为 4 个字节。PC和服务器上的 32 位系统占有率也在慢慢下降,嵌入式系统使用 32 位越来越多。

    在 64 位环境下,不同的操作系统会有不同的结果,如下所示:

    操作系统 short int long
    Win64(64位 Windows) 2 4 4
    类Unix系统(包括 Unix、Linux、Mac OS、BSD、Solaris 等) 2 4 8


    目前我们使用较多的PC系统为 Win XP、Win 7、Win 8、Win 10、Mac OS、Linux,在这些系统中,short 和 int 的长度都是固定的,分别为 2 和 4,大家可以放心使用,只有 long 的长度在 Win64 和类 Unix 系统下会有所不同,使用时要注意移植性。

    sizeof 操作符

    获取某个数据类型的长度可以使用 sizeof 操作符,如下所示:

    
     
    1. #include <stdio.h>
    2. int main()
    3. {
    4. short a = 10;
    5. int b = 100;
    6.  
    7. int short_length = sizeof a;
    8. int int_length = sizeof(b);
    9. int long_length = sizeof(long);
    10. int char_length = sizeof(char);
    11.  
    12. printf("short=%d, int=%d, long=%d, char=%d\n", short_length, int_length, long_length, char_length);
    13.  
    14. return 0;
    15. }

    在 32 位环境以及 Win64 环境下的运行结果为:

    short=2, int=4, long=4, char=1

    在 64 位 Linux 和 Mac OS 下的运行结果为:

    short=2, int=4, long=8, char=1


    sizeof 用来获取某个数据类型或变量所占用的字节数,如果后面跟的是变量名称,那么可以省略( ),如果跟的是数据类型,就必须带上( )

    需要注意的是,sizeof 是C语言中的操作符,不是函数,所以可以不带( ),后面会详细讲解。

    不同整型的输出

    使用不同的格式控制符可以输出不同类型的整数,它们分别是:

    • %hd用来输出 short int 类型,hd 是 short decimal 的简写;
    • %d用来输出 int 类型,d 是 decimal 的简写;
    • %ld用来输出 long int 类型,ld 是 long decimal 的简写。


    下面的例子演示了不同整型的输出:

    
     
    1. #include <stdio.h>
    2. int main()
    3. {
    4. short a = 10;
    5. int b = 100;
    6. long c = 9437;
    7.  
    8. printf("a=%hd, b=%d, c=%ld\n", a, b, c);
    9. return 0;
    10. }

    运行结果:
    a=10, b=100, c=9437

    在编写代码的过程中,我建议将格式控制符和数据类型严格对应起来,养成良好的编程习惯。当然,如果你不严格对应,一般也不会导致错误,例如,很多初学者都使用%d输出所有的整数类型,请看下面的例子:

    
     
    1. #include <stdio.h>
    2. int main()
    3. {
    4. short a = 10;
    5. int b = 100;
    6. long c = 9437;
    7.  
    8. printf("a=%d, b=%d, c=%d\n", a, b, c);
    9. return 0;
    10. }

    运行结果仍然是:
    a=10, b=100, c=9437

    当使用%d输出 short,或者使用%ld输出 short、int 时,不管值有多大,都不会发生错误,因为格式控制符足够容纳这些值。

    当使用%hd输出 int、long,或者使用%d输出 long 时,如果要输出的值比较小(就像上面的情况),一般也不会发生错误,如果要输出的值比较大,就很有可能发生错误,例如:

    
     
    1. #include <stdio.h>
    2. int main()
    3. {
    4. int m = 306587;
    5. long n = 28166459852;
    6. printf("m=%hd, n=%hd\n", m, n);
    7. printf("n=%d\n", n);
    8.  
    9. return 0;
    10. }

    在 64 位 Linux 和 Mac OS 下(long 的长度为 8)的运行结果为:
    m=-21093, n=4556
    n=-1898311220

    输出结果完全是错误的,这是因为%hd容纳不下 m 和 n 的值,%d也容纳不下 n 的值。

    读者需要注意,当格式控制符和数据类型不匹配时,编译器会给出警告,提示程序员可能会存在风险。

    展开全文
  • C语言数据类型占用字节大小

    万次阅读 多人点赞 2018-03-16 09:51:54
    在昨天的笔试的时候碰到了一个关于不同的数据类型占用字节大小的问题,于是就想归纳整理一下关于这方面的问题。于是就写了一下,在Linux系统下用gcc编译验证了一下,以供参考。16编译器:char/unsigned char :1...

    在昨天的笔试的时候碰到了一个关于不同的数据类型占用字节大小的问题,于是就想归纳整理一下关于这方面的问题。于是就写了一下,在Linux系统下用gcc编译验证了一下,以供参考。

    16位编译器:

    char/unsigned char :1字节
    char *:2字节
    short int:2字节
    int/unsigned int:2字节
    long int:4字节
    float:4字节
    double:8字节

    32位编译器:
    char/unsigned char :1字节
    char *:4字节
    short int:2字节
    int/unsigned int:4字节
    long int:4字节
    float:4字节
    double:8字节
    long long:8字节
    long double:12字节

    64位编译器:
    char/unsigned char :1字节
    char *:8字节
    short int:2字节
    int/unsigned int:4字节
    long int:8字节
    float:4字节
    double:8字节
    long long:8字节

    long double:16字节


    在上面我们也可以看到不管16/32/64位的编译器,char、short int、float、double、long long这几个类型占用的字节数都是相同的,比较特殊的是long double在32位编译器下占用的字节是12位。

    类型/编译器16位编译器32位编译器64位编译器
    void000
    char111
    char *248
    short int222
    int244
    float444
    double888
    long448
    long double81216
    long long888


    顺便看了一下unsigned long int和unsigned int的区别:

    在32位编译器下,因为同占4字节,因此没有取值范围没有区别


    在64位编译器下,unsigned long int占8字节,而unsigned int占4字节,就有区别了



    由于我安装的Ubuntu是64位版本的,因此想要生成32位的程序,需要安装下面的库

    $ sudo apt-get install build-essential module-assistant  
    $ sudo apt-get install gcc-multilib g++-multilib

    展开全文
  • 在32处理器中,int a; sizeof(a)=4;char a; sizeof(a)=1;float a; sizeof(a)=4;double a; sizeof(a)=8;long a; sizeof(a)=4;long int a; sizeof(a)=4;short a; sizeof(a)=2;在用户自己构造的数据类型数组,...

    在32位处理器中,

    int a;  sizeof(a)=4;

    char a; sizeof(a)=1;

    float a; sizeof(a)=4;

    double a; sizeof(a)=8;

    long a; sizeof(a)=4;

    long int  a; sizeof(a)=4;

    short a; sizeof(a)=2;


    在用户自己构造的数据类型数组,结构体,联合体中,

    数组:

    int a[]={20,2,10};  sizeof(a)=12;

    double a[]={20,2,10};  sizeof(a)=24;

    结构体:

    结构体变量所占存储空间的大小是所有成员之和,但是当考虑对齐方式时,结构体变量所占存储空间的大小不是所有成员之和

    1、

    struct a

    {

        int z; //4byte

    };

     sizeof(struct a)=4;

    2、

    struct a

    {

        int z;  //4byte

        char c;  //4byte

    };

     sizeof(struct a)=8;

    3、

    struct a

    {

        char c;  //1byte

    };

     sizeof(struct a)=1;


    4、//这个例子便涉及到了字节对齐问题

    struct a

    {

        int z;  //4byte

        char c;  //4byte

       double v;  //8byte

    };

     sizeof(struct a)=16;

    联合体:

    联合体所占存储空间大小取决于联合体中最大数据类型所占的空间的大小

    union A

    {

       int a; //4byte

    float b;  //4byte

    double c; //8byte

    };

    sizeof(union A)=8;

    展开全文
  • 2016-09-01 01:07齐显尼 客户经理1 实型数据在内存中的存放形式实型数据在内存中占4个字节(32)。...3.6547实型变量包括单精度型,双精度型,长双精度型2 以下是各类型数的表示范围:int 字节4 数值范围:...

    2016-09-01 01:07齐显尼 客户经理

    1 实型数据在内存中的存放形式

    实型数据在内存中占4个字节(32)位。按照指数形式存贮。

    系统把实型数据分成小数部分和指数部分。如实数3.6547的

    存放形式如图所示:

    + .36547 1

    数符 小数部分 指数

    + .36547 * 10^1->3.6547

    实型变量包括单精度型,双精度型,长双精度型

    2 以下是各类型数的表示范围:

    int 字节4 数值范围:-2147483648~+2147483647

    长整型 long 字节4 数值范围 -2147483648~+2147483647

    float 字节4 数值范围 3.4×10^-38~3.4×10^38

    double 字节8 数值范围 1.7×10^-308~1.7×10^308

    短整型 short 字节2 数值范围 -32768~+32767

    long 字节4 数值范围 -2147483648~+2147483647

    double表示的范围要比float大很多,精度要高,看你实际情况自己选择,当你想输出结果保留的精度要更高,就选择double,根据你想保留多少位有效数字而实际选择

    看区别:

    float的精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4字节空间

    double的精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8字节空间。

    实型跟整型不是同一类数据,当你想输出结果是整数的时候,当然要int类型,

    长整型跟短整型就是取值范围的不同。

    一切都是根据你想输出的结果而又效的选择数据类型

    展开全文
  • C语言数据类型

    千次阅读 多人点赞 2019-01-09 09:22:28
    C语言数据类型可分为以下类: 基本类型 整型: int 有符号: signed int 又称(signed\int) 占4个字节 %d %i 无符号: unsigned int 又称(unsigned) 占4个字节 %zd %zi (signed与unsigned只改变最高...
  • 今天心血来潮,想要了解一下C语言中各整型占用几个字节。 先上代码测试两个环境; #include<stdio.h> #include<stdlib.h> int main() { printf("sizeof(int)) :%d\n",sizeof(int)); printf("sizeof...
  • C语言int、long等类型所占的字节数

    万次阅读 2018-01-30 14:37:19
    C语言int、long等类型所占的字节数。实验环境是win10,64操作系统。 #include int main() { printf("sizeof(int)) :%d\n",sizeof(int)); printf("sizeof(long) :%d\n",sizeof(long)); printf("sizeof...
  • char short int long long long float double 对C语言基本类型做出全面的讨论
  • 利用VS2019进行如下测试 32开发环境: ...这里不论是32还是64,long类型占用了4字节的长度。 而指针类型的变量,32是4字节;64是8字节。 欢迎评论交流。 更多分享,欢迎扫码关注。 ...
  • 指针类型都是占用4个字节,如char* 、int*、double* 2、对于64系统即X64环境,64编译器下: 指针类型都是占用4个字节,如char* 、int*、double* 从而可以看出在32和64编译器中,除了指针变量的寻址范
  • 在学习C语言的时候很多人可能遇到了和我同样的...CPU的数据传输方式是一次传输2个(32)或者8个(64)字节的方式进行传输(根据总线条数来确定),这里我们以64系统来举例,如果你声明一个变量占用8个字节,且...
  • 手机评站网今天精心准备的是《int个字节》,下面是详解!int占多少字节?int有shortintint,longint三种形式,它们分别占多少字节?如果只输入int,它是不是可以包含以上三种形式?...int有short intint,...
  • 一、数据类型占用字节数与机器字长与编译器有关,遵循的条规律如下: sizeof(short int )<=sizeof(int) sizeof(int)<=sizeof(long int) short int 至少应为16(2个字节) long in 至少应为32(4...
  • C语言 时间类型

    2020-01-01 12:39:27
    time.h 定义的类型: time_t|表示距离 UTC 时间 1970-01...clock_t|占用cpu的时间 struct tm|存储年月日的结构体(time_t不易人来读) struct tm { int tm_sec; /* Seconds: 0-59 (K&R says 0-61?) */ int tm_min...
  • 1)int类型以及指针的类型所占字节的大小由什么决定的? 首先,介绍个基本概念:(主要摘自百度百科)  机器字长:在同一时间中处理二进制数的位数叫字长。通常称处理字长为8数据的CPU叫8CPU,32CPU就是...
  • 在32处理器中, int a;  sizeof(a)=4; char a; sizeof(a)=1; float a; sizeof(a)=4; double a; sizeof(a)=8; long a; sizeof(a)=4; long int  a; sizeof(a)=4; short a; sizeof(a)=2; 在...
  • 1、C语言各数据类型在内存中占用的字节由编译器决定,本测试以VS2015的X86模式运行。 2、确定数据类型后,无论变量是多少(不超出范围),都会占用固定的内存大小(由类型决定)。 3、内存的地址和大小以16进制...
  • C语言自定义类型

    2019-09-17 16:28:22
    在学习C语言的时候,它有很多的自定义类型,例如:结构体,枚举,联合。。。 这些类型在我们的日常使用的时候,或多或少的都会遇见到,下面就系统的介绍一下这类型。 一.结构体 1.结构体类型的声明:通俗点来说...
  • C语言struct内存占用问题

    千次阅读 2012-03-27 21:33:26
    对于基本数据类型(比如int,char),他们占用的内存空间在一个确定硬件系统下有个确定的值,所以,接下来我们只是考虑结构体成员内存分配情况。 1.1 、 Win32平台下的微软C编译器(cl.exe for 80×86)的对齐策略 ...
  •    int数据类型的位数为16,short int数据类型的位数也是16。而long int的位数为32,可用来存储比较大的整数。 short int 和 long int可以缩写为short 和... C语言中的整型数据类型int、short int 和 lo
  • C语言类型所占字节数

    万次阅读 多人点赞 2017-06-07 17:09:25
    其实C标准并没有具体给出规定哪个基本类型应该是多少个字节数,而且这个也与OS、编译器有关,比如同样是在32操作系统,VC++的编译器下int类型为4个字节,而在tuborC下则是2个字节。 下面给出一个表格,方便查看个...
  • C语言几种整形类型的区别

    万次阅读 2016-02-13 09:46:03
    今天写了一道算法题,碰到long int类型定义的变量,竟然不知道什么意思。。。 查资料,总结分享如下: int数据类型的位数为16,short int数据类型的位数也是16。... C语言中的整型数据类型int、short int 和 long i
  • C语言中的整型数据类型int、short&…

    千次阅读 2017-07-04 19:55:04
    int数据类型的位数为16,short int数据类型的位数也是16。而long int的位数为32,可用来存储比较大的...C语言中的整型数据类型int、short int 和 long int   名称 全称类型说明符 缩写类型说明符  位数 
  • 所以今天来总结一下C语言常见的数据类型,包括其大小范围,输入输出符号,占用字符数。 整型 int 即short int 整型变量,占用2字节,范围:-2的15次方~2的15次方-1 ※ 其区间长度,刚好是2的16次方。 用%d...
  • C语言基础之类型系统

    2018-07-02 23:56:52
    一、类型系统介绍类型系统是每个编程语言都会有的基本...整型数值基本类型1、char 占用一个字节2、short 占用两个字节3、int 目前基本都是4字节4、long int (可以简写为 long) (32系统是4字节,64系统是8字节...
  • C编译器剖析_2.4 C语言类型系统

    千次阅读 2015-01-27 20:02:10
    2.4 C语言类型系统  这一节,我们准备初步讨论一下C语言的... 对于数据区,C语言提供了char、short、int、long、float和double等基本类型来刻画基本的操作数。char、short、int和long等整型还进一步分有unsigned和
  • 数据类型 说明 32系统 64系统 取值范围 字节数 字节数 取值范围 bool 布尔型 true,false 1 1 true,false char 字符型 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,419
精华内容 14,167
关键字:

c语言int类型占用几位

c语言 订阅