【发布时间】:2020-04-24 16:08:43
【问题描述】:
上下文:
这主要是对that other question的跟进。 OP 想猜测一个变量是否包含一个 int,我的第一个想法是在 C 中(如在 C++ 中)一个 int 变量只能包含一个 int 值。 Eric Postpischil 提醒我,对于 int 类型,每个标准都允许 trap 表示...
当然,我知道大多数现代系统只使用整数的 2 补码表示,没有填充位,这意味着无法观察到陷阱表示。尽管如此,这两个标准似乎仍然允许有符号类型的 3 种表示形式:符号和幅度、一个补码和二进制补码。并且至少 C18 草案(n2310 6.2.6 类型表示)明确允许除 char 以外的整数类型的填充位。
问题
因此,在可能的填充位或非二进制补码符号表示的上下文中,int 变量可能包含符合实现的陷阱值。是否有可靠的方法来确保 int 变量包含有效值?
【问题讨论】:
-
我知道C和C++是不同的语言,有不同的标准参考文档。但在这里,我会对两者及其可能的差异感兴趣。如果差异太重要或者可能会弄乱答案,我可以专门针对其中一个问题提出这个问题,然后针对另一种语言提出不同的问题。
-
如果可以观察到,那也不算陷阱。或者至少将其称为陷阱是正确。
-
您可以随时将
memcpyint到char[sizeof int],然后对位值进行特定于平台的检查...
标签: c++ integer language-lawyer data-representation bit-representation