【发布时间】:2010-09-14 18:39:33
【问题描述】:
Another question 询问如何确定 C 中的奇数/偶数,并且 C 标准允许的 one's complement-based 系统的惯用 (x & 1) 方法被正确标记为损坏。
系统真的存在于计算机博物馆之外的“现实世界”中吗?自 1970 年代以来我一直在编码,我很确定我从未遇到过这样的野兽。
真的有人为这样的系统开发或测试代码吗?如果没有,我们应该担心这些事情还是应该将它们与纸带和穿孔卡片一起放入Room 101...?
【问题讨论】:
-
我知道这个问题已经过时了,但是任何阅读它的人都应该知道
(x & 1U)is 有效(注意U)用于确定偶数/奇数-补码或符号/幅度实现。 -
@R.你确定吗?:在 32 位 1 的 comp 中,-1 表示为 0xFFFFFFFE,所以 (0xFFFFFFFE & 0x00000001) = 0x00000000 = false。
-
@Roddy:在所有系统上计算 (MAX_INT+1- (-value)) 都需要转换负符号整数。对于使用二进制补码数学的系统,计算结果将具有与原始有符号整数相同的位表示,因此许多编译器将简单地重新解释该值而不生成任何代码来对其进行操作。然而,在具有反码或有符号幅度计算的系统上,编译器必须为类型转换生成代码以确保定义的行为。
-
@Supercat - 很有趣,谢谢! re: (MAX_INT+1- (-value)) - 你有这个来源吗?是否仅在 C99 标准中?
-
维基百科signed number representations上的文章提到“Unisys ClearPath Dorado系列主机使用反码”。