ISO C标准允许的三个编码的方法签署了整数:两个补,一个是补充和签署/规模。

什么是一个高效率或良好的方式来检测的编码在运行时(或其他一些时间,如果有一个更好的解决方案)?我想知道这样我就可以优化于图书馆的不同的可能性。

我计划计算的这个和其存储在一个变量,每次运行的程序,因此它不具有可以令人眼花缭乱的快速-我假设编码不会变化在运行的程序:-)

有帮助吗?

解决方案

你只需要检查的低位定 -1 喜欢的东西 -1 & 3.这一计算结果为

  1. 对于签署和幅度,
  2. 对于一个人的补充和
  3. 为两个人的补充。

这应该甚至可能做到在一个预处理器表达的内部 #if #else 结构。

其他提示

检测的补应该是很简单 - 像if (-x == ~x)。检测补应该是差不多一样简单:if (-x == ~x + 1)。如果它是既不那些的,那么它必须是符号/幅值。

为什么不能在编译的时候做呢?你可以有构建脚本/ Makefile文件编译一个测试程序,如果需要的话,但后来使用预处理器做条件编译。这也意味着性能的的不那么重要,因为它只有每编译运行一次,而不是每运行一次。

获取的指针为int,将显示独特的位模式。将它转换为一个指向无符号整型,然后检查比特值。

一对夫妇精心挑选的价值观这样做应该做你想要什么。

我猜你会负数作为int存储到char阵列大到足以容纳它,并用各种表示数组比较来了解一下。

但是,呃... ...无符号整数,不应该有一个标志,不是吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top