size of long int and int in C showing 4 bytes
我做了下面的实验来了解系统中long int和int的大小
系统规格:64位Windows 7gcc mingw编译器Eclipse CDT
我对我得到的输出感到困惑……我没有理由支持我计划的结果,如果有人对此有任何想法,请分享并帮助我。
程序:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<stdio.h>
#include<conio.h>
int main (){
unsigned long int b ;
unsigned int a ;
printf("%d",sizeof(b ));
printf("
");
printf("%d",sizeof(a ));
} |
输出:
四
四
同一程序的联机gcc compier版本4.8.1给出了不同的输出
八
四
- 打印size_t类型值的正确方法是从c99打印%zu。在以前的版本中,%lu和一个cast to (unsigned long)。%d是为int而签署的,而size_t不是。
- 如果需要64位,请使用unsigned long long int b;。
- mingw是一个32位编译器,因此大小符合32位窗口
- @ L?U V?NH ph&250;C K,但为什么尺寸相同……这是我的问题……当存在可以存储4字节数据的int时,long int有什么用呢?
- 因为编译器可以有不同的类型大小,只要它符合标准。gcc来自*nix,所以long int和64位类似,在*nix操作系统中很常见。
- C标准并不禁止他们平等。例如,您可以看到16位x86 short和int都是16位,为什么short必须短于int?
规范上说sizeof(int) <= sizeof(long),但至少32位用于long,16位用于int。
http://www.cplusplus.com/doc/tutorial/variables/变量/
(前缀singned或unsigned对所需空间没有影响)
如果要使用指定的位宽度,我建议使用int32_t、uint64_t等。
根据有关数据类型大小的文档,您的结果是正确的。
在64位Windows安装中,long int(有符号和无符号)和int(有符号和无符号)都是32位,因此它们显示为4个字节。
- K我接受这一点,但为什么它们是一样的……那么long int的用法是什么。
- @维什瓦纳斯戈德达克他们并不总是一样的。根据该表,在16位Windows设置或64位类Unix系统(Linux、Unix、Mac等)上,类型将具有不同的大小。
- "它们并不总是相同的"…那有什么区别呢?如果在32位编译器、64位操作系统中int和long int的大小相同,那么为什么我们需要long int呢?有什么特别的目的吗?
- @vishwanathgowdak请参阅本文,以全面解释为什么UnixOS开发人员认为lp64数据模型优于llp64。一个简短的总结是,为了与32位系统的大小/对齐兼容性,int保留了32位,但出于指针/寻址原因,64位long被认为比32位long更自然。本文还指出,LLP64模型被迫定义EDCOX1〔3〕,非标准(直到C++ 11)64位的大小。