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