用二进制来表达负数,但这个二进制不是也可以表示一个正数吗?

举例:-1的4位二进制:

1的二进制是0001

反码是1110

补码是1111

但15用二进制表示也是1111

那问题来了,计算机这么知道这是-1还是15?

慕粉4241372
浏览 1834回答 3
3回答

MinRam

4bit的二进制补码表示范围…为-2³到2³-1 即-8~7

onemoo

其实如果只看 1111 这4位二进制数,计算机也不知道它们是什么。所以编程语言会有类型系统,这些二进制位在被解释为相应的类型后才有意义。以 1111 为例:当它的类型是有符号整型,那么它就表示 -1。有符号整型的最高位被视为符号位,这里符号位为 1 表示它是负数,按照补码解释为 -1。 有符号数最大只能表示为二进制 0111,也就是十进制的 7。当它的类型是无符号整型,那么它就是 15。所以具体会被解释成什么由它的类型而定。顺便说下,这也正是为什么整型间转型时会发生溢出。 如果你把这个 15 转型为有符号整型,那 1111 就被当作是 -1 了。所以转型时要注意不同类型能表示的数值范围。

慕无忌8046009

最高位不是表示符号位吗
打开App,查看更多内容
随时随地看视频慕课网APP