- 締切済み
論理演算を用いての演算処理について
論理演算を用いての剰余を行うプログラムを教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
まず、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)
例えばある数Xを8で割った余りを求めるには X AND 0x07 すればいいです。 1FhでANDを取るということは、32での余りを求めることですね。
- ekuko_ecch
- ベストアンサー率17% (16/91)
筆算で2進数の割り算をすれば、簡単にわかりますよ。 ある意味、10進数の割り算より簡単です。
補足
何度もすみません char x; int main() { x=68; _asm{ mov al, x and al, 1Fh mov x, al } } この回答はPentiumのアセンブラで剰余を出すプログラムになるのでしょうか?
- tatsu99
- ベストアンサー率52% (391/751)
a % b とやるとaをbで割ったあまりが求められますが それではだめなのでしょうか。
お礼
最初、自分のそう思っていたのですがなんか違うみたいなんです。 でも回答ありがとうございます。
お礼
なんとなく解った気がします!ありがとうございました。