读书人

int为何是4个字节

发布时间: 2013-08-09 15:16:24 作者: rapoo

int为什么是4个字节?
如题,int为什么是4个字节?别告诉我本来就是四个字节这种话,我刚被人问的时候也这么想的…有人知道深层原因么? int 类型长度
[解决办法]
int是最基本的类型,一般和CPU的字宽一致。
[解决办法]
为了和CPU的字宽一致,提高处理速度。。。
[解决办法]
操作系统16位的时候,int 2字节,操作系统32位的时候,int 4字节,由于32位系统之前占主流地位,实际现在就算是64位系统,出于兼容性考虑,int也是4字节的
[解决办法]
看编译器规定
还有2个字节8字节呢
[解决办法]
The C Programming language这本书,里面有一句话是这样的:Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long.意思大致是编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:
C类型 32 64
char 1 1
short int 2 2
int 4 4
long int 4 8
long long int 8 8


char* 4 8
float 4 4
double 8 8
需要说明一下的是指针类型存储的是所指向变量的地址,所以32位机器只需要32bit,而64位机器需要64bit。
[解决办法]


[解决办法]
为甚么4字节操作内存就方便呢
想想看处理器(CPU)是如何读写内存的。
[解决办法]
引用:
Quote: 引用:


The C Programming language这本书,里面有一句话是这样的:Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long.意思大致是编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:
C类型 32 64
char 1 1
short int 2 2
int 4 4
long int 4 8
long long int 8 8
char* 4 8
float 4 4
double 8 8
需要说明一下的是指针类型存储的是所指向变量的地址,所以32位机器只需要32bit,而64位机器需要64bit。
32位机器下,int跟long int都是4字节,那这俩有什么区别呢
《C++ primer》中的描述:“一般地,short类型为半个机器字(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中,int类型和long类型通常字长是相同的)。“
其实这是个历史遗留问题,16位时期 long就是32位的,为了兼容。而int应该是最适合当前机器的字长,所以也是32位的
[解决办法]
引用:

Quote: 引用:

The C Programming language这本书,里面有一句话是这样的:Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long.意思大致是编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:
C类型 32 64
char 1 1
short int 2 2
int 4 4
long int 4 8
long long int 8 8
char* 4 8
float 4 4
double 8 8
需要说明一下的是指针类型存储的是所指向变量的地址,所以32位机器只需要32bit,而64位机器需要64bit。
32位机器下,int跟long int都是4字节,那这俩有什么区别呢

说白了就是 C++兼容c以前程序,所以弄得这般不伦不类
c#自成一派,没有这些顾忌,long在c#下就是64位的。
你要问区别,那我告诉你 在c++里 它们表示范围一样的。没啥区别。
还有不要这么打破砂锅问到底,让你老师情何以堪。
[解决办法]


引用:
我想知道32位下这俩有区别么,还是没什么区别?

据我所知,除了类型不一样,其他应该没区别 (使用上)
类型不一样,所以
void f(int) { }
void f(long) { } 算重载,而不是重复定义
int->long存在隐式转换,其他情形(比如long->int、指针间转换)都会有错误或者告警

网络通信的情形下,推荐用cstdint里面的int32_t,uint32_t之类的,而非int、long这种内建类型,因为通信两端的机器的int之类的大小很可能不一样大....


[解决办法]
以前,16位系统,int是2个字节的
现在,大多数32位系统,int 是4个字节
等以后64位系统占主流,int 会是8个字节

对机器来说,操作1个int最快。

读书人网 >C++

热点推荐