Turing Complete Unofficial

Signed Less

前提レベル

このレベルを前提とするレベル

概要

2つのbyte入力を符号付き整数とみなして、 入力1が入力2より小さいならばTrueを出力する 回路を構成する問題です。

攻略

入力をA, Bとおくと、A-Bが負であるならばTrueを出力すればよいです。

解答

開く

引き算を行って負数であるかを判定すればよいのですが、 普通に引き算を行って最上位ビットを見る方法ではうまくいかないケースがあります。 それはBが負数で補数との足し算の結果 最上位ビットが1となってしまう場合です。 例えばA = 32, B = -120の場合引き算の結果は152となりますが、 8bit符号付き整数としては-104として扱われます。

そのため、符号拡張という方法を用いて9bit整数として扱います。 符号拡張は上位ビットを増やして符号ビットで埋める操作です。 例を示します。

10進数8bit9bit
00b000000000b000000000
1270b011111110b011111111
-320b111000000b111100000
-1280b100000000b110000000

この方法を用いて9bit整数の引き算を行い、最上位ビットを調べればよいです。