int8_t,int16_t,int32_t和int64_t在不同的C ++编译器上有相同的范围吗?

时间:2016-02-01 14:03:46

标签: c++ range

或者这取决于16位,32位等编译器?

此外,这些数据类型是否在C,C#或Java中有效?

3 个答案:

答案 0 :(得分:5)

C ++标准要求int8_tint16_tint32_tint64_t完全符合指定的宽度,未签名的对应项前缀为u,< em>仅当目标平台上存在此类型时。是的,这些是C中有效的标准类型.Java和C#不包含相同名称的这种整数数据类型。

相关类型有intN_least_tintN_fast_t,其中&#34;最少&#34;类型至少具有指定的位数。

答案 1 :(得分:4)

intN_tN位长的精确宽度整数类型。根据C11草案N1570 7.2.1.1,它们被定义为:

  

typedef name intN_t指定一个有符号整数类型,其宽度为N,没有填充位和二进制补码表示。因此,int8_t表示这样的有符号整数类型,其宽度恰好为8位。

然而

  

这些类型是可选的。但是,如果实现提供宽度为8,16,32或64位的整数类型,没有填充位,并且(对于带有二进制补码表示的有符号类型),它应定义相应的typedef名称。

这些类型在C和C ++中有效。正常shortintlong long这些原因除了最小范围外没有任何保证

在C#中,这将等同于Int16,Int32和Int64类型。在jave中,我们可以使用byteshortintlong,因为这些都是guaranteed to be of an exact width.

答案 2 :(得分:0)

它们具有基于std C ++的相同范围。更多详情here

并且它们在C上有效,但在Java和C#上不确定