如何检测的编码,在签署整数在C?
-
26-09-2019 - |
题
ISO C标准允许的三个编码的方法签署了整数:两个补,一个是补充和签署/规模。
什么是一个高效率或良好的方式来检测的编码在运行时(或其他一些时间,如果有一个更好的解决方案)?我想知道这样我就可以优化于图书馆的不同的可能性。
我计划计算的这个和其存储在一个变量,每次运行的程序,因此它不具有可以令人眼花缭乱的快速-我假设编码不会变化在运行的程序:-)
解决方案
你只需要检查的低位定 -1
喜欢的东西 -1 & 3
.这一计算结果为
- 对于签署和幅度,
- 对于一个人的补充和
- 为两个人的补充。
这应该甚至可能做到在一个预处理器表达的内部 #if #else
结构。
其他提示
检测的补应该是很简单 - 像if (-x == ~x)
。检测补应该是差不多一样简单:if (-x == ~x + 1)
。如果它是既不那些的,那么它必须是符号/幅值。
为什么不能在编译的时候做呢?你可以有构建脚本/ Makefile文件编译一个测试程序,如果需要的话,但后来使用预处理器做条件编译。这也意味着性能的多的不那么重要,因为它只有每编译运行一次,而不是每运行一次。
获取的指针为int,将显示独特的位模式。将它转换为一个指向无符号整型,然后检查比特值。
一对夫妇精心挑选的价值观这样做应该做你想要什么。
我猜你会负数作为int
存储到char
阵列大到足以容纳它,并用各种表示数组比较来了解一下。
但是,呃... ...无符号整数,不应该有一个标志,不是吗?
不隶属于 StackOverflow