Math 无符号12位二进制加法/sub

Math 无符号12位二进制加法/sub,math,binary,bit,Math,Binary,Bit,我需要对12位无符号数字进行加法/减法运算 对于无符号12位整数: x = 0111 1000 0101, x = 1925 y = 1011 1100 0100, y = 3012 z = x+y = ? z = x-y = ? 我得到了x+y的00110100101 但是我应该为x-y做什么呢 答案是否定的,它不以无符号整数的形式存在。您需要转换为形式,然后添加 x - y = x + y' 其中y'是y的两个补码 用2的补码进行否定的一个简单技巧是从右到左写出你的数字。你基本上复制了

我需要对12位无符号数字进行加法/减法运算

对于无符号12位整数:

x = 0111 1000 0101, x = 1925
y = 1011 1100 0100, y = 3012

z = x+y = ?
z = x-y = ?
我得到了x+y的00110100101

但是我应该为x-y做什么呢

答案是否定的,它不以无符号整数的形式存在。

您需要转换为形式,然后添加

x - y = x + y'
其中
y'
y
的两个补码

用2的补码进行否定的一个简单技巧是从右到左写出你的数字。你基本上复制了这个号码。写下所有的零直到你遇到一个1,也写下1。然后翻转所有剩余的数字

例如否定
01101000

0110 1000
---------
      000    copy zeros until first 1
     1000    copy the 1
1001 1000    flip all remaining bits

如果整数是无符号的,我为什么要这样做呢?因为二进制溢出,这无关紧要。“负片”就是这样设计的。所以,你的整数会溢出到看起来不对的地方,但那是因为你减去了一个更大的数字。为什么你认为用无符号整数做这件事是有意义的?为什么不试试呢。在无符号整数的世界里,
x-y
其中
x
在技术上是一种下溢状态。不管多少位代表一个数字系统,这都是正确的。如果您想做像C这样的语言可能做的事情,只需做减法运算并忽略高于第12位的任何位。但这仍然是一个暗流。