首页 文章

为什么128位一和二的补码使用8位溢出?

提问于
浏览
1

假设我想用8位代表128和2的补码,没有符号位

Wouldn't that be:

一个补充: 0111 1111

二补: 0111 1110

没有溢出

But the correct answer is:

一个补充: 0111 1111

二补: 0111 1111

溢出

Additional Question:

为什么一个_2552189的补充分别是 0000 00010000 0001 . 你怎么不像我们用128做的那样翻转位?

2 回答

  • 3

    一个和两个补码都是表示有符号整数的方法 .

    对于One的补充表示:

    • 正数:以其常规二进制表示形式表示

    • 例如:十进制值1将在8位One的补码中表示为0000 0001

    • 负数:通过补充其大小的二进制表示来表示

    • 例如:-127的十进制值将以8位One的补码表示为1000 0000,因为127的二进制表示为0111 1111,当补充为1000 0000时

    对于Two的补充表示:

    • 正数:以其常规二进制表示形式表示

    • 例如:十进制值1将在8位One的补码中表示为0000 0001

    • 负数:通过补充其大小的二进制表示来表示,然后将该值加1

    • 例如:-127的十进制值将在8位One的补码中表示为1000 0001,因为127的二进制表示是0111 1111,当补充时将是1000 0000然后添加0000 0001以获得1000 0001

    因此,在两个实例中都有128个溢出,因为128的二进制表示是1000 0000,其中一个补码表示-127,而二进制补码表示-128 . 为了能够在两个和两个补码中表示128,你需要9位,它将表示为0 1000 0000 .

  • 4

    在8位无符号中,128是 1000 0000 . 在8位二_2552193中补码 .

    0111 1110 是126 .

    comment中所述, 0111 1111 是127 .

    https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html .

    两个补码和一个补码都是表示负数的方法 . 正数只是二进制数;没有补充涉及 .

    我使用一个补码算术(LINC)在一台计算机上工作 . 我非常喜欢两个补码,因为只有一个零表示 . 二进制补码的缺点是有一个值(-128,对于8位数字)是无法否定的 - 导致你要问的溢出 . 一个人的补充没有那个问题 .

相关问题