Tag: 二重补充

如何在各种编码中均匀检测整数的符号位(1的补码,2的补码,符号幅度)?

如何检测C中的int符号? 这个问题主要是历史机器。 我问的是如何区分整数是0还是-0。 在1的补码和符号/幅度int编码中,0(或+0)和-0都是可能的。 简单符号位测试是与0进行比较。 int x; printf(“sign bit is %s\n”, (x < 0) ? "set" : "not set"); 但是当x是-0时,这在1的补码和符号幅度上失败。 第一候选人方法:面膜测试。 由于C定义了int必须具有符号位而不管整数编码,因此以下内容应该有效。 int x; int SignBitMask = tbd; printf(“sign bit is %s\n”, (x & SignBitMask) ? “set” : “not set”); 问题变成如何确定C中SignBitMask的值? SignBitMask = INT_MAX + 1似乎是一个起点。 第二候选方法:创建函数并检查位模式: int IsSignBitSet(int x) { if (x > 0) […]