• 締切済み

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

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

みんなの回答

回答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
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 剰余演算を論理演算と加減算に置き換える方法

    剰余(割算の余り)を求める演算を論理演算と加減算とビットシフトのみで行う方法がありましたら教えてください。 言語はC/C++ではなくても大丈夫です(ロジックだけでも)。

  • 論理演算について質問

    何度もすみません。 また質問します。これで最後にしたい、、 質問1:&&や||等の論理演算子は、その両側にある2つの“boolean型の式(関係式等)”に対して論理演算を行う。 評価は、両側の式に対して並列に行うのではなく、1つづつ行って行く。 因みに、||は「論理式」を論理演算するこどができる。例えば、 int a=1,b=0,c=0のとき a==1 && b==3 || a==1 && b==0 の論理式があったとします。 この論理式の||は、即に演算されたa==1 && b==3とa==1 && b==0の論理式を演算の対象としている。 質問2:「評価」と「論理演算」って意味は同じですか?違いますか?違うならその違いは? 質問3:a==1 && b==0 || (a==1 && b==0)の論理式は、先に(a==1 && b==0)の論理式を論理演算すると思ってました。でも、以前そのような仮説をもって質問したら、回答者の方に実際違うと指摘されました。何故ですか?だって()の中の論理式なんだから、優先的に演算されるはず。

    • ベストアンサー
    • Java
  • 論理演算について質問

    int a=1,b=0,c=0のとき a==1 && b==0 || (a==1 && b==0) a==1 && b==0 &&c==0 && b==0 の2つの論理式あったとします 質問1:&&や||は、その間にある2つの関係式や2つの関係式の論理演算の結果同士などを論理演算するものだと思います。この認識で正しいですか? 質問2:上記の論理式の後者a==1 && b==0 &&c==0 && b==0について、trueになるプロセスの認識は以下で正しいですか? a==1 && b==0 はtrue       ↓  左から2番目の&&は、左の論理式(a==1 && b==0)の演算結果であるtrueと関係式c==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、、結果true ↓ 左から3番目の&&は、左の論理式(a==1 && b==0 &&c==0 )の演算結果であるtrueと右の関係式b==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、結果true 質問3:上記前者の論理式a==1 && b==0 || (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? (a==1 && b==0)はtrue      ↓ a==1 && b==0 はtrue      ↓ ||は、右の論理式((a==1 && b==0))の演算の結果trueと左の論理式(a==1 && b==0)の演算結果trueを計算し(つまり論理演算の結果同士であるtrue2つを演算)、結果true

    • ベストアンサー
    • Java
  • 論理演算について質問

    最初に、前回同じ質問に答えてくださった方へ、いろいろな人から僕の仮説のコンセンサスを得たいので、再度同じ質問しますね。 int a=1,b=0,c=0のとき a==1 && b==0 | (a==1 && b==0) a==1 && b==0 &&c==0 && b==0 の2つの論理式あったとします 質問1:&&や||は、その間にある2つの関係式や2つの関係式の論理演算の結果同士などを論理演算するものだと思います。この認識で正しいですか? 質問2:上記の論理式の後者a==1 && b==0 &&c==0 && b==0について、trueになるプロセスの認識は以下で正しいですか? a==1 && b==0 はtrue       ↓  左から2番目の&&は、左の論理式(a==1 && b==0)の演算結果であるtrueと関係式c==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、、結果true ↓ 左から3番目の&&は、左の論理式(a==1 && b==0 &&c==0 )の演算結果であるtrueと右の関係式b==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、結果true 質問3:前者の論理式、a==1 && b==0 | (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? (a==1 && b==0)はtrue      ↓ a==1 && b==0 はtrue      ↓ |は、右の論理式((a==1 && b==0))の演算の結果trueと左の論理式(a==1 && b==0)の演算結果trueを計算し(つまり論理演算の結果同士であるtrue2つを演算)、結果true

    • ベストアンサー
    • Java
  • 論理演算

    8桁の2進数10110111の最上位(最左端)のビットだけを0にするには、8桁の2進数01111111と、どのような論理演算を行えばよいか。 選択肢 (1)論理積 (2)論理和 (3)否定論理積 (4)否定論理和 という問題の答えと、なぜそうなるかを教えて下さる方いませんか。 よろしくお願いします。

  • 論理演算子について

    論理演算に使う「or」なんですが、制御構文ifと組み合わせて以下のような使い方をしてみました。 $data01='aaa'; $data02='あああ'; $data03='test'; if ($data01 =~ m/aaa/ or $data02 =~ m/あああ/ or &data03 =~ m/test/){ 特定の処理; } このorによる論理演算ははどこまでできるのでしょうか? 上のスクリプトは問題なく動いていますが、ちょっと不安です。 専門書を見ても、orによる論理演算は<条件1 or 条件2>としか書いてなく <条件1 or 条件2 or 条件3 or ・・・>と書いても大丈夫なのでしょうか? いくつもの比較はorを使わないほうがよろしいとは思うんですが、このorが便利なのでこれで済むなら使いたいと思います。

  • 論理演算、どう解けば?

    論理演算を解く際に、図を描いたり(AとBが重なった絵)、1と0の真理値表を書いたりしますよね。 どちらを使って解くべきなのでしょうか?

  • 論理演算子について

    初歩的な質問だと思いますが・・・ 論理演算子の&はなんのためにあるのでしょうか? &&だけで十分な気がします。 &の右の条件が正しく動いているのかを確認するためだけのものでしょうか? 一応ですが&と&&の動作の違いはわかっていますので

  • 論理演算の問題です

    論理演算の問題です if( !( a > 0 && b == 0) ) は、 if( a <= 0 || b != 0 ) になりますか? また、 if( !( x > 0 || y < 0 ) は、 if( x <= 0 && y >= 0 ) になりますか? 遅い脳みそで考えました。 このような、論理演算を分かりやすくまとめられたサイトをご存知でしたら、 どなたか教えてください。 お願いします。

  • 論理演算子がブール型のように 比較演算子もブール型

    論理演算子がブール型のように 比較演算子もブール型ですか?