在 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:当然是这样。它们在二进制补码实现上是相等的,而不是在二进制补码(或符号幅度)实现上,因此可用于测试使用哪种表示。 @LokiAstari static_assert(-1==~0,"not 2's complement"); 符号幅度表示怎么样? @plasmacel 在符号幅度系统上 ~0 是 -INT_MAX 也不是 -1

以上是关于在 C++ 中检测一个或两个的补码体系结构?的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络体系结构与参考模型

月销10万+!长城汽车全面发力“森林式生态体系”结硕果

在 C、C++ 中检测 Windows 或 Linux [重复]

软考-软件设计师-计算机组成与体系结构

软考-软件设计师-计算机组成与体系结构

结构化概要设计工具之结构图