我一般理解2的补语的概念。当将一个值转换为2的补码以进行减法时,只需将该数字的每一位数减去1's补码并加1。在计算类似于二进制的2-2的结果时,首先将-2转换为2的补码(我喜欢使用4位表示),然后将0010转换为1101,然后再转换为1110。然后计算0010 + 1110,得到0000,溢出的1被截断。
但是,像2-3这样的问题呢?所以我也做了同样的手术。2为0010,2的补体为3 (0011)为1101。所以0010 + 1101会导致1111,没有溢出。结果是15.15不是负1。我是否遗漏了2的补充工作的一个关键点,而其他网站和来源却忽略了这一点?
发布于 2015-12-24 18:11:58
记住,你在做签名算术。
在有符号算术中,最重要位位置的1或最左边的位置表示(-)号。
所以1111是一个负数。
1111翻转是0000加1是0001。
所以答案是1级,并有符号(-)。
2-3=-1
发布于 2015-12-24 18:19:20
当您在两个补码中计算时,结果总是必须作为两个补码来处理。如前所述,结果是-1在签名的两个补码,或15为无符号无溢出。
你必须注意的是,如果你用正数减法,结果是负的,你就不会溢出。但是如果结果是肯定的,就会有溢出。
这是合乎逻辑的:如果结果为正,则必须小于原始值。添加导致较小值的唯一方法是溢出。当结果为负值时,当处理为无符号时,它将始终大于原始值(MSB将为1,而原始值将为0),并且没有溢出。
https://stackoverflow.com/questions/34456327
复制相似问题