C++ 为什么在某些系统上长整数占用的字节数超过4个?
我知道标准规定长整数的大小取决于实现,但我不知道为什么 它所需要做的就是能够存储-2147483647到2147483647或0到4294967295C++ 为什么在某些系统上长整数占用的字节数超过4个?,c++,long-integer,C++,Long Integer,我知道标准规定长整数的大小取决于实现,但我不知道为什么 它所需要做的就是能够存储-2147483647到2147483647或0到4294967295 假设1字节为8位,则所需的字节数不应超过4字节。那么,可以安全地说,只有当一个字节少于8位时,长整数才会占用超过4个字节吗?或者还有其他可能吗?比如可能是低效的实现浪费空间?额外的字节并不是浪费空间。更大的范围是非常有用的。标准规定了最小范围,而不是精确范围本身;有更广泛的类型没有什么错 当标准最初指定的int应至少为16位时,普通处理器的寄存器
假设1字节为8位,则所需的字节数不应超过4字节。那么,可以安全地说,只有当一个字节少于8位时,长整数才会占用超过4个字节吗?或者还有其他可能吗?比如可能是低效的实现浪费空间?额外的字节并不是浪费空间。更大的范围是非常有用的。标准规定了最小范围,而不是精确范围本身;有更广泛的类型没有什么错 当标准最初指定的
int
应至少为16位时,普通处理器的寄存器不大于16位。表示一个long
需要两个寄存器和特殊操作
但是后来32位成为标准,现在
int
s到处都是32位,long
s是64位。如今,大多数处理器都有64位指令,长指令通常可以存储在单个寄存器中。额外的字节不会浪费空间。更大的范围是非常有用的。标准规定了最小范围,而不是精确范围本身;有更广泛的类型没有什么错
当标准最初指定的int
应至少为16位时,普通处理器的寄存器不大于16位。表示一个long
需要两个寄存器和特殊操作
但是后来32位成为标准,现在
int
s到处都是32位,long
s是64位。如今,大多数处理器都有64位指令,长指令通常可以存储在一个寄存器中。您假设了很多事情:
- 字节是
位宽CHAR\u位
- 数据类型的限制在§3.9.1/8中给出
标题
杰克·克莱因的文章可能会引起你的兴趣 你假设了很多事情:
- 字节是
位宽CHAR\u位
- 数据类型的限制在§3.9.1/8中给出
标题
杰克·克莱因的文章可能会引起你的兴趣 大于32位的
长的一个明显用途是具有更大的可用范围
例如,在long-long-int
(和公司)被纳入标准之前,DEC销售64位(Alpha)处理器和64位操作系统。他们建立了一个(符合要求的)系统,包括:
char = 1 byte
short = 2 bytes
int = 4 bytes
long = 8 bytes
至于他们为什么会这样做:一个明显的原因是,他们的客户可以访问64位类型,并利用他们的64位硬件。大于32位的长
的一个明显用途是有更大的可用范围
例如,在long-long-int
(和公司)被纳入标准之前,DEC销售64位(Alpha)处理器和64位操作系统。他们建立了一个(符合要求的)系统,包括:
char = 1 byte
short = 2 bytes
int = 4 bytes
long = 8 bytes
至于他们为什么会这样做:一个明显的原因是,他们的客户可以访问64位类型并利用他们的64位硬件。如果您想要一个特定大小的整数,那么您需要使用指定大小的类型:
int8\u t
int16\t
int32\u t
int64\t
int128\t
这些在一些随机头文件中可用(它根据你使用的操作系统而不同,虽然在C++中似乎是)
您的未签名版本在开头使用了u(uint32\t)
其他人已经回答了为什么大小会如此之大
请注意,最新的英特尔处理器也支持256位数字。真是浪费,嘿?!8-)
哦!!时间也开始使用64位。在2068年,32位的时间将变为负数,并在1800年末给你一个日期。。。这是为一些事情采用64位的一个很好的理由。如果您想要一个特定大小的整数,那么您需要使用指定大小的类型:
int8\u t
int16\t
int32\u t
int64\t
int128\t
这些在一些随机头文件中可用(它根据你使用的操作系统而不同,虽然在C++中似乎是)
您的未签名版本在开头使用了u(uint32\t)
其他人已经回答了为什么大小会如此之大
请注意,最新的英特尔处理器也支持256位数字。真是浪费,嘿?!8-)
哦!!时间也开始使用64位。在2068年,32位的时间将变为负数,并在1800年末给你一个日期。。。这是在一些事情上采用64位的一个很好的理由。使用8字节整数的一个原因是能够寻址超过4 Gig的内存。即2^32=4G字节。2^64=嗯,太多了
就我个人而言,我使用8字节整数在双浮点数上实现基数排序(将浮点数转换为整数,然后用它做一些不值得在这里描述的神奇事情。:)使用8字节整数的一个原因是能够寻址超过4 Gig的内存。即2^32=4G字节。2^64 =