【发布时间】:2019-06-03 06:04:25
【问题描述】:
我知道我们可以用多种方式表示二进制数,但我真的不知道如何区分正二进制数和负二进制数。
如果我们有数字+13,那么它的二进制表示是这样的:
1101
它的否定表示是这样的:
11101
我的理解是,如果你需要区分它们,那么0的存在在数字+13中很重要:
01101
即便如此,我还是分不清:
11101 ///Here is the representation of -13
和:
11101 ///Here is the representation of +29
我知道这里使用了另一种称为“二进制补码”的方案,我需要应用它。
如何区分这两种二进制表示?
【问题讨论】:
-
你不能,除非你知道程序中使用的确切类型。请注意
11011可能不是负数,因为1是所用类型大小的最高有效位。例如,-1 和 255 有歧义,因为它可以写成11111111 -
这取决于它的使用方式,例如使用什么机器指令来处理它。
11011是无符号数、二进制补码还是符号/大小数?只是因为它的二进制表示是11011,你不知道。哎呀,它甚至可能不代表一个数字,而是完全不同的东西。 -
看看这个相关的帖子:stackoverflow.com/questions/2931630/…
-
11011表示“有符号幅度”,这是表示负号的一种方式(不常见)。其他方式是二进制补码(最常见)和一个补码(不常见)。更糟糕的是,C 允许所有三种形式。但现实世界的计算机几乎只使用二进制补码。 -
1011二进制是十进制的 11,而不是 13。