• 締切済み

論理演算を用いての演算処理について

論理演算を用いての剰余を行うプログラムを教えてください。

みんなの回答

回答No.4

まず、10進数で考えてみましょう。 10で割った剰余=1の桁だけ取り出す。 100で割った剰余=10と1の桁だけ取り出す。 10^n で割った剰余=n桁より下の部分だけ取り出す。 これが基本です。 2進数で考えると、 2 = 10(2) で割った剰余=1(2) の桁だけ取り出す 4 = 100(2) で割った剰余=10(2) と 1(2) だけ取り出す。 2^n = 10..(0がn個) で割った剰余= n桁(2) より下の部分だけ取り出す。 さらに、理論演算は、 特定の桁のデータだけ残す=その桁を1残りを0にして AND を取る。 2 で割った剰余= 2進数で一桁だけ取り出す = 1(2) でAND を取る。 4 で割った剰余= 2進数で2桁だけ取り出す = 11(2) でAND を取る。 つまり、 2^n で割った剰余= n桁(2) より下の部分だけ取り出す= n桁の(1) で AND を取る ですね。 10進数で簡単にあまりが取り出せるのは、10^n で割ったときです。同じように、この考え方が単純に適用できるのは、2^n で割ったときだけです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

例えばある数Xを8で割った余りを求めるには X AND 0x07 すればいいです。 1FhでANDを取るということは、32での余りを求めることですね。

btf7068
質問者

お礼

なんとなく解った気がします!ありがとうございました。

回答No.2

筆算で2進数の割り算をすれば、簡単にわかりますよ。 ある意味、10進数の割り算より簡単です。

btf7068
質問者

補足

何度もすみません char x; int main() { x=68; _asm{ mov al, x and al, 1Fh mov x, al } } この回答はPentiumのアセンブラで剰余を出すプログラムになるのでしょうか?

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

a % b とやるとaをbで割ったあまりが求められますが それではだめなのでしょうか。

btf7068
質問者

お礼

最初、自分のそう思っていたのですがなんか違うみたいなんです。 でも回答ありがとうございます。