Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在某些系统上长整数占用的字节数超过4个?_C++_Long Integer - Fatal编程技术网

C++ 为什么在某些系统上长整数占用的字节数超过4个?

C++ 为什么在某些系统上长整数占用的字节数超过4个?,c++,long-integer,C++,Long Integer,我知道标准规定长整数的大小取决于实现,但我不知道为什么 它所需要做的就是能够存储-2147483647到2147483647或0到4294967295 假设1字节为8位,则所需的字节数不应超过4字节。那么,可以安全地说,只有当一个字节少于8位时,长整数才会占用超过4个字节吗?或者还有其他可能吗?比如可能是低效的实现浪费空间?额外的字节并不是浪费空间。更大的范围是非常有用的。标准规定了最小范围,而不是精确范围本身;有更广泛的类型没有什么错 当标准最初指定的int应至少为16位时,普通处理器的寄存器

我知道标准规定长整数的大小取决于实现,但我不知道为什么

它所需要做的就是能够存储-2147483647到2147483647或0到4294967295


假设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位
    位宽
PDP-10的字节范围为1到36位。DEC VAX支持对128位整数类型的操作。因此,有足够的理由超越标准要求

  • 数据类型的限制在§3.9.1/8中给出
标准模板std::数值_限的专门化(18.3) 应规定每种算术类型的最大值和最小值 用于实现

查找
标题


杰克·克莱因的文章可能会引起你的兴趣

你假设了很多事情:

  • 字节是
    CHAR\u位
    位宽
PDP-10的字节范围为1到36位。DEC VAX支持对128位整数类型的操作。因此,有足够的理由超越标准要求

  • 数据类型的限制在§3.9.1/8中给出
标准模板std::数值_限的专门化(18.3) 应规定每种算术类型的最大值和最小值 用于实现

查找
标题


杰克·克莱因的文章可能会引起你的兴趣

大于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 =