Signed Less
前提レベル
このレベルを前提とするレベル
概要
2つのbyte入力を符号付き整数とみなして、 入力1が入力2より小さいならばTrueを出力する 回路を構成する問題です。
攻略
入力をA, Bとおくと、A-Bが負であるならばTrueを出力すればよいです。
解答
引き算を行って負数であるかを判定すればよいのですが、 普通に引き算を行って最上位ビットを見る方法ではうまくいかないケースがあります。 それはBが負数で補数との足し算の結果 最上位ビットが1となってしまう場合です。 例えばA = 32, B = -120の場合引き算の結果は152となりますが、 8bit符号付き整数としては-104として扱われます。
そのため、符号拡張という方法を用いて9bit整数として扱います。 符号拡張は上位ビットを増やして符号ビットで埋める操作です。 例を示します。
10進数 | 8bit | 9bit |
---|---|---|
0 | 0b00000000 | 0b000000000 |
127 | 0b01111111 | 0b011111111 |
-32 | 0b11100000 | 0b111100000 |
-128 | 0b10000000 | 0b110000000 |
この方法を用いて9bit整数の引き算を行い、最上位ビットを調べればよいです。