アプリ版:「スタンプのみでお礼する」機能のリリースについて

最大値が2進0b100の3bitと3bitの加算を最小の回数及び論理演算(or,and,xor,not)でやりたいのですが難しくていいのが思いつけません……
教えてもらえると助かります。

ちなみに、最大値が0b100というのは1bit同士を加算した2bit、その2bit同士を加算した3bitが最大値0b100の3bit同士を加算したいからです。
2bit同士は、c0 = a0^b0, c1 = (a0&b0) ^ (a1^b1), c2 = a1&b1 //a+b=c// という感じで行けました。

そしてかなりの回数一連の処理を行うので最小の回数でやりたいのです。

A 回答 (2件)

すみませんが、ちょっと意味がわかりません。



最大値が2進0b100の3bitと3bitの加算
というのは、x,yが3bitとして
w=x+yのとき
 0≦ x,y ≦0b100, 0≦ w ≦0b100
ということなのでしょうか?
それとも w は別の制限(4bitとか)なのでしょうか?
w が最大値を越えた場合、どうなるのでしょうか?溢れた分が無視されるのでしょうか?0b100になるのでしょうか?


w が4bit以上あるとか、オーバーフローは無視するとかなら、行うことはただの3bit加算器です。
http://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97% …

w≦0b100, 最大値を越えたら最大値、という計算なら
wが最大値となるのは、以下のいずれかの場合です。
 xが最大値
 yが最大値
  xの下位2bit + y の下位2bit が最大値以上

xの下位2bit + y の下位2bit → t (2bit), ct(キャリーフラグ)
とすると、
w2は、結果が最大値のときに1になるので
 w2=x2 or y2 or ct
w1,w0は、結果が最大値以上の場合には0,それ以外ではx+yの値なので
 w1=(not w2) and t1
 w0=(not w2) and t0

この回答への補足

ああごめんなさい・・・説明が不十分でした。
最大値が0b100とは0b101や0b111などの0b100超が存在しない、と言う意味です
いくつかキャリーフラグなどの計算を略せるかな―と思っていました。

補足日時:2014/02/16 23:52
    • good
    • 0

キャリーアップは変数化が必要だと思います



e0 = c0 ^ d0
cf = c0 & d0
e1 = (c1 ^ d1) ^ cf
cf = (c1 & d1) | (c1 & cf) | (d1 & cf)
e2 = (c2 ^ d2) ^ cf
e3 = c2 & d2 // キャリーアップの必要なし
    • good
    • 0
この回答へのお礼

動作できました、ありがとうございます!

お礼日時:2014/02/16 23:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!