【问题标题】:unsigned 12-bit binary addition/sub无符号 12 位二进制加法/减法
【发布时间】:2013-10-03 05:01:11
【问题描述】:

我需要用 12 位无符号数做一些加/减。

对于无符号的 12 位整数:

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

z = x+y = ?
z = x-y = ?

我得到了 x + y 的 0011 0100 1001

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

答案是否定的,它不作为 unsigned int 存在。

【问题讨论】:

  • 在无符号整数的世界中,x - y 其中x < y 在技术上是下溢条件。不管有多少位代表一个数字系统,这都是正确的。如果你想做像 C 这样的语言可能会做的事情,只需做减法并忽略高于第 12 位的任何位。但它仍然是一个下溢。

标签: math binary bit


【解决方案1】:

你需要转换成two's complement的形式,然后添加。

x - y = x + y'

其中y'y 的二进制补码。

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

例如否定0110 1000

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

【讨论】:

  • 如果整数是无符号的,我为什么要这样做?
  • 因为二进制溢出,没关系。 “底片”就是这样设计的。所以,你的整数会溢出到看起来不正确的东西,但那是因为你减去了一个更大的数字。为什么你认为用无符号整数来做这件事是有意义的?你为什么不试试呢。
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 2011-08-04
  • 2019-08-20
  • 2016-10-31
  • 1970-01-01
  • 2012-04-08
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多