Binary 无符号二进制整数减法

Binary 无符号二进制整数减法,binary,unsigned,unsigned-integer,Binary,Unsigned,Unsigned Integer,是否可以从较小的无符号整数中减去较大的无符号整数?我试图考虑的例子是00000000-11111111,其中两个整数都是无符号的 由于无符号整数不能为负数,该表达式的计算结果是什么?是的,至少在通用定义下是这样。“不能为负”并不意味着减法变成了部分函数,即“有时不可能”。这意味着有一些结果,根据定义,它是非负的,通过将顶部位解释为具有正权重而不是负权重,因此根本不存在被解释为“负值”的位组合 不过,这其实只是一点点而已。有符号整数和无符号整数对位的含义的解释略有不同(例如,对于8位,顶部位的权重

是否可以从较小的无符号整数中减去较大的无符号整数?我试图考虑的例子是00000000-11111111,其中两个整数都是无符号的


由于无符号整数不能为负数,该表达式的计算结果是什么?

是的,至少在通用定义下是这样。“不能为负”并不意味着减法变成了部分函数,即“有时不可能”。这意味着有一些结果,根据定义,它是非负的,通过将顶部位解释为具有正权重而不是负权重,因此根本不存在被解释为“负值”的位组合

不过,这其实只是一点点而已。有符号整数和无符号整数对位的含义的解释略有不同(例如,对于8位,顶部位的权重为-128或+128,这取决于我们是将其解释为有符号整数还是无符号整数),导致某些操作具有单独的有符号和无符号版本(明显大于和小于,还有除法和其他一些)。减法明显不在异常列表中:减法就是减法,没有“有符号减法”和“无符号减法”

有几种方法可以定义减法,而不需要太多其他定义,例如:

  • x-y=~(x+y)
  • x-y=x+~y+1
(这些定义当然是等价的,否则会有问题)

按位补码是位向量的基本运算,加法只是普通的位向量加法,它既不是真的有符号也不是无符号,两者都有

因此,有不同的方法来查看示例,
00000000-11111111
。需要注意的是,减法运算的右操作数也被称为负1(这在通过“无符号眼镜”查看时也有意义)由于
11111111+00000001=00000000
因此满足了否定的代数定义)并且我们知道
0-(-1)=1
,所以答案必须是
00000001
。或者我们可以使用减法的定义,例如
00000000-11111111=~(~00000000+11111111)=~(11111111111+11111)=~11110=00000001