【发布时间】:2016-02-01 14:03:46
【问题描述】:
还是这个取决于16位、32位等编译器?
此外,这些数据类型在 C、C# 或 Java 中是否有效?
【问题讨论】:
还是这个取决于16位、32位等编译器?
此外,这些数据类型在 C、C# 或 Java 中是否有效?
【问题讨论】:
intN_t 是 N 位长的精确宽度整数类型。根据 C11 草案 N1570 7.2.1.1,它们被定义为:
typedef 名称 intN_t 指定宽度为 N、无填充位和二进制补码表示的有符号整数类型。因此,int8_t 表示这样一个宽度正好为 8 位的有符号整数类型。
然而
这些类型是可选的。但是,如果实现提供了宽度为 8、16、32 或 64 位的整数类型,没有填充位,并且(对于有符号类型)具有二进制补码表示,则它应定义相应的 typedef 名称。
这些类型在 C 和 C++ 中有效。我们之所以拥有这些正常的short、int 和long long,除了最小范围外,不能保证它们的大小
在 C# 中,这相当于 Int16、Int32 和 Int64 类型。在Java中我们可以使用byte、short、int和long,因为它们都是guaranteed to be of an exact width.
【讨论】:
C++。说这些类型在 C++ 中标准化是否正确? \ [basic.fundamental] 中没有提到它们。事实上,C++ 标准仅在 [cstdint.syn] 中偶然提及它们。
C++ 标准要求 int8_t、int16_t、int32_t 和 int64_t 精确地指定宽度,无符号对应项以 u 为前缀,仅当目标上存在此类类型时平台。是的,这些是 C 中有效的标准类型。Java 和 C# 不包含此类同名的整数数据类型。
相关类型为intN_least_t 和intN_fast_t,其中“最少”类型至少具有指定的位数。
【讨论】:
它们具有基于标准 C++ 的相同范围。更多详情here
它们在 C 上有效,但在 Java 和 C# 上不确定
【讨论】:
int main() { int64_t x; } 作为有效程序。它不是。你能澄清一下吗?
stdint.h 中可用。您是否包含标题
stdint.h 中。它说可能存在,如果存在,它们必须具有某些属性。您的stdint.h(或我的)中发生的事情并不能解决问题。
stdint.h 中。我已经重复了3次,我完成了。其他两个答案用更容易理解的术语来描述它,en.cppreference.com/w/cpp/types/integer 也是如此
stdint.h 中,因为它来自c99 到C++。他们将其称为cstdint。我们在同一页吗