Binary 两个';s补码-如果有';在2'中表示二进制还需要一位;补语形式

Binary 两个';s补码-如果有';在2'中表示二进制还需要一位;补语形式,binary,Binary,我在一所高中修计算机科学A-level课程,目前正在研究二的补码算法。不知什么原因,我不太明白。我知道如何将一个有符号整数转换为其2的补码等价物,但我的困惑在于: 我做过一些研究,人们说运算码是进位,它告诉CPU 2的补码代表的是正整数还是负整数,但有些人有时会忽略进位;例如,将1111(-1)与1000(-8)相加得到10111(-9),但如果是4位计算机,最高有效位(即第5位)无法存储,那么计算机如何处理 一个有点小的问题是,如果00110011以2的补码形式表示一个有符号整数,那么我如何知

我在一所高中修计算机科学A-level课程,目前正在研究二的补码算法。不知什么原因,我不太明白。我知道如何将一个有符号整数转换为其2的补码等价物,但我的困惑在于:

  • 我做过一些研究,人们说运算码是进位,它告诉CPU 2的补码代表的是正整数还是负整数,但有些人有时会忽略进位;例如,将1111(-1)与1000(-8)相加得到10111(-9),但如果是4位计算机,最高有效位(即第5位)无法存储,那么计算机如何处理
  • 一个有点小的问题是,如果00110011以2的补码形式表示一个有符号整数,那么我如何知道实际代码是0110011,这是一个正数(以2的补码形式),还是110011,这是一个负数(以2的补码形式)

  • 谢谢

    通常,不合适的东西会丢失。因此,11112+10002=01112。但是,某些CPU具有特殊标志,根据是否存在无符号溢出(进位标志)和有符号溢出(溢出标志),将其设置为0或1。当算术指令不能产生没有溢出的结果时,某些CPU可能会自动引发溢出异常

    通常,CPU不关心11112是-110还是1510。两个N位整数的二进制加法和减法得到相同的N位和或差,而不管您是对无符号整数还是对2的补码有符号整数进行运算。将两个N位有符号2的补码或无符号整数相乘时也是如此:乘积的N个最低有效位在这两种情况下都是相同的


    注意,您的工作是跟踪您正在操作的类型,处理溢出(如果可能的话),并为这些类型选择适当的指令(例如,您通常有有符号和无符号除法、有符号和无符号比较等)。

    通常,不适合的内容会丢失。因此,11112+10002=01112。但是,某些CPU具有特殊标志,根据是否存在无符号溢出(进位标志)和有符号溢出(溢出标志),将其设置为0或1。当算术指令不能产生没有溢出的结果时,某些CPU可能会自动引发溢出异常

    通常,CPU不关心11112是-110还是1510。两个N位整数的二进制加法和减法得到相同的N位和或差,而不管您是对无符号整数还是对2的补码有符号整数进行运算。将两个N位有符号2的补码或无符号整数相乘时也是如此:乘积的N个最低有效位在这两种情况下都是相同的


    注意,您的工作是跟踪您正在操作的类型,处理溢出(如果可能的话),并为这些类型选择适当的指令(例如,您通常使用有符号和无符号除法、有符号和无符号比较等)。

    感谢您的回复!基本上,我理解CPU在操作时不关心二进制代码是+还是-但是,我这里有一个具体的示例,它可能更好地解释了我需要解决的问题:当将0101(+5)添加到1111(在本例中可以是-1或15)时,我们得到的结果是10100。如果我们忽略前导的1,它变成0100,即5和-1之和;但是,当我们保持前导1时,它变成10100,这是5和15的总和…所以我很困惑计算机如何选择忽略溢出位以得出正确答案?@Francis.Tricka CPU不选择这里。它只是做N位+N位=N位加法。其中N通常为8、16、32或64,CPU中通用寄存器的大小。加法是从最低有效位到最高有效位的,对吗?因此,在计算总和的N位后,您可以停止该过程。哦,我知道它是如何工作的,但为什么溢出位在丢失时不会影响正确的计算,因为丢失的位表示一个数字?@Francis.Tricka溢出标志如何影响结果?为什么要这样做?(除了修改标志外,设置标志和执行其他操作还有额外的复杂性)如果您关心溢出,请检查标志。通常情况下,您不关心或确定没有溢出,因此不检查标志。感谢您的回复!基本上,我理解CPU在操作时不关心二进制代码是+还是-但是,我这里有一个具体的示例,它可能更好地解释了我需要解决的问题:当将0101(+5)添加到1111(在本例中可以是-1或15)时,我们得到的结果是10100。如果我们忽略前导的1,它变成0100,即5和-1之和;但是,当我们保持前导1时,它变成10100,这是5和15的总和…所以我很困惑计算机如何选择忽略溢出位以得出正确答案?@Francis.Tricka CPU不选择这里。它只是做N位+N位=N位加法。其中N通常为8、16、32或64,CPU中通用寄存器的大小。加法是从最低有效位到最高有效位的,对吗?因此,在计算总和的N位后,您可以停止该过程。哦,我知道它是如何工作的,但为什么溢出位在丢失时不会影响正确的计算,因为丢失的位表示一个数字?@Francis.Tricka溢出标志如何影响结果?为什么要这样做?(除了修改标志外,设置标志和执行其他操作还有额外的复杂性)如果您关心溢出,请检查标志。通常,您不关心或确定没有溢出,因此不检查标志。