浮动大小是否取决于操作系统?

时间:2016-10-28 14:41:19

标签: c++ windows

对不起,我无法使用Google找到这个问题的答案。我不是说英语的人,也许我没有用正确的词语进行搜索。

我记得数据类型的大小取决于架构字的大小(或者我错了)。但是,我不确定尺寸是否还取决于操作系统。

现在我正在使用Windows 7 32位,我不确定当我使用Windows 7 64位时浮动是否会改变其大小。

我使用Visual Studio 2012使用Win32项目编译我的解决方案。

如果我将Windows版本从32位更改为64位,大小是否会改变?

我不是在询问浮动和双重之间有什么不同。如果我将操作系统从Windows 7 32位更改为Windows 7 64位(或反之亦然),我会询问浮动在同一台计算机上的内存大小(内存中的位数)是否相同。

2 个答案:

答案 0 :(得分:5)

正式地,浮点类型的大小取决于所使用的特定编译器。

实际上,对于基于内置浮点硬件芯片的系统(即除了某些嵌入式系统以外的所有系统),编译器将使用浮点硬件,并且所有针对该芯片的编译器都将使用floatdouble的大小相同。

此外,桌面硬件已经采用了IEEE 754浮点标准,该标准规定了floatdouble的大小(long double是一个相当不同的问题)。因此,当您定位桌面系统时,可以安全地假设float在任何地方都是相同的大小,double在任何地方都是相同的大小。

如果您对此感到担心,可以使用std::numeric_limits<float>::is_iec559std::numeric_limits<double>::is_iec559来检查编译器使用的浮点实现是否符合IEEE 754(IEC 559是旧版本的名称) IEEE 754标准)。

答案 1 :(得分:1)

  

3.9.1基本类型

     

有三种浮点类型:float,double和long double。   double类型提供至少与float一样多的精度   类型long double提供至少与double一样多的精度。该   float类型的值集是该组值的子集   双重类型; double类型的值集是。的子集   long double类型的值集。 的值表示   浮点类型是实现定义的。

重点是我的。 C ++标准不需要浮点类型的任何特定表示。浮动数据类型的大小可以在不同的操作系统,不同版本的操作系统,甚至同一操作系统的不同编译器之间,或者甚至是使用相同编译器的不同编译选项之间改变或保持不变。