在 C++ 中检测一个或两个的补码体系结构?
Posted
技术标签:
【中文标题】在 C++ 中检测一个或两个的补码体系结构?【英文标题】:Detect one's or two's complement architecture in C++? 【发布时间】:2013-05-06 05:59:32 【问题描述】:在 C++ 中检测体系结构是否使用 1 或 2 的补码表示最可靠的方法是什么?
【问题讨论】:
如果只有这些选项,请查看(-1) & 1
。
@BasileStarynkevitch 我使用异构超级计算机架构,我想在每个二进制文件的开头记录它,以了解它是否与尝试读取它的架构兼容。
今天小端或大端不是更重要吗?基本上你正在做序列化,今天有库可以可靠地做到这一点.....s11n 和其他人
@Vincent - 只需将“-1”与“~0”进行比较。它们与二进制补码相等,与一个补码不等于。
【参考方案1】:
您不必担心 - 没有太多的补充机器 :)
但最简单的方法可能是将“-1”与 ~0 进行比较。
【讨论】:
这不是实现定义的行为吗? @R.MartinhoFernandes:当然是这样。它们在二进制补码实现上是相等的,而不是在二进制补码(或符号幅度)实现上,因此可用于测试使用哪种表示。 @LokiAstaristatic_assert(-1==~0,"not 2's complement");
符号幅度表示怎么样?
@plasmacel 在符号幅度系统上 ~0 是 -INT_MAX 也不是 -1以上是关于在 C++ 中检测一个或两个的补码体系结构?的主要内容,如果未能解决你的问题,请参考以下文章