Math 无符号12位二进制加法/sub
我需要对12位无符号数字进行加法/减法运算 对于无符号12位整数: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的补码进行否定的一个简单技巧是从右到左写出你的数字。你基本上复制了
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位的任何位。但这仍然是一个暗流。