在C++中检测一个或两个补数架构?

16

如何在C++中检测系统架构使用的是一补数还是二补数表示法,哪种方法最可靠?


4
如果这些是唯一的选项,请检查(-1) & 1 - Daniel Fischer
1
@BasileStarynkevitch 我从事异构超级计算机架构的工作,我想在每个二进制文件的开头记录下来,以便知道它是否与尝试读取它的架构兼容。 - Vincent
今天,大小端是否更重要?基本上,您正在进行序列化,并且现在有可靠的库来完成此操作..... s11n 和其他库。 - Basile Starynkevitch
2
@Vincent - 只需将“-1”与“~0”进行比较。在二进制补码中,它们是相等的,但在一进制补码中,它们是不相等的 - paulsm4
1个回答

13

不用担心 - 目前市面上的一补数机器并不多 :)

但最简单的方法可能是将“-1”与~0进行比较。


9
当然可以。在二进制补码实现中,它们会相等;而在一补数(或符号-大小)的实现中,它们不会相等。因此,可以用它们来测试使用哪种表示法。 - Mike Seymour
4
@LokiAstari 的代码片段:static_assert(-1==~0,"not 2's complement"); 可以翻译为:静态断言(static_assert)-1等于按位取反的0,如果不是二进制补码则出错。 - Johnathan Gross
或者你可以将-1与~0进行比较。如果它们不相等,那么你就有了补码硬件。 - paulsm4
2
符号幅度表示法怎么样? - plasmacel
5
在一个符号-幅值系统中,~0 不是 -1,而是 -INT_MAX。请注意,翻译过程中不能添加解释或其他内容。 - phuclv
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接