- ベストアンサー
論理演算の解き方を教えて下さい。
Q.「ある数Nから次のデータに論理演算を用いて変換したい。その手順を16進数で記述せよ。但しXは変化させてはならないビットを表す。また、データ長は8ビットとする。」 (1)N→XXXX0XXX (2)N→X0111001 という問題です。まず問題文の意味からわかりません。よろしくお願いいたします。
- その他([技術者向] コンピューター)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず論理演算はわかりますか? AND,OR,NOT,XOR というやつです。 データ長が8ビットということは、Nも2進数で書けば8桁です。 そのNと何らかの数値を論理演算させると、別の数が得られます。 たとえば、 00101101 と 11000111 のANDとORをとった場合それぞれ、 AND→00000101 OR →11101111 となります。 上記を16進数で書くと、00101101は4D、11000111はC7、00000101は05、11101111はEFなので、 4D AND C7 = 05 4D OR C7 = EF となります。(2進数と16進数の変換は大丈夫ですよね?) ここで、問題文の意味を考えると、(1)の場合、 Nが2進数で、 XXXX0XXX の場合も、 XXXX1XXX の場合も、 何からの数値と論理演算をすると、結果が XXXX0XXX になるような演算を考えて、16進数で書きなさい、ということです。 ビットごとに考えましょうね。値を変化させない論理演算とは、また強制的に1や0に変えてしまう論理演算とは、1ビットで考えると何でしょう?
その他の回答 (1)
- FEX2053
- ベストアンサー率37% (7987/21355)
一桁の2進数A,Bがあって、A or B という論理演算を行った場合、 B が ゼロならば、A がどんな数字であっても、答えは A ですよね。 1 or 0 = 1 0 or 0 = 0 同じように A or B という論理演算を行う場合、 A or B で B が 1 ならば A は何であっても 1、 A and B で B が 0 ならば A が何であっても 0、ですよね。 以上から考えれば解ける筈です。 ・・・ちなみに数Nは2進数の数値ですよね?
補足
参考になりました。ありがとうございました。
関連するQ&A
- phpの論理演算の式で、 論理演算 <?php
phpの論理演算の式で、 論理演算 <?php $x = 8; $y = 3; echo($x == 3 || $y == 3)."\n"; echo($y == 1 || $y == 1)."\n"; 出力されるのは 空と1です この空や1のような値で、真偽を表現(出力)する方法がブーリアン型と呼ばれますか? php プログラミング
- ベストアンサー
- PHP
- 4の倍数を論理演算で表す。。
/*Prog32.cキーボードから整数型変数aへデータを入力し、aの値が4の倍数のときは“4の倍数です”と表示し、そうでないときは、“4の倍数ではありません”と表示する。ただし、整数データのビット数はわからないものとし、計算にはビットごとの論理演算のみを用いる。*/ #include <stdio.h> int main(void) { int a; printf("整数を入力して下さい! "); scanf("%d", &a); (a % 4 ) ? printf("4の倍数ではありません。\n", a) :printf("4の倍数です。\n", a); return(0); } 4の倍数を論理演算で表す方法がわかりません。。 自分では上記のように算術を使うやりかたしかわかりませんでした。 よろしくお願いします!
- ベストアンサー
- C・C++・C#
- 論理演算子について
論理演算に使う「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が便利なのでこれで済むなら使いたいと思います。
- 締切済み
- Perl
- シフト演算子について・・・意味がわかりません(T_T)
左シフト演算子<<は最上位ビットの上位を削除して最下位に0を追加、 右シフト演算子>>は最下位ビットが削除されて、最上位ビットに最上位ビットと同じ値が補充される、 論理右シフト>>>は最下位ビット削除され、最上位に0が補充される。 と、ここまではわかりました・・・ ある問題で int n = -1>> 31; でnはいくつになるか?というのがあったんですが、 解説の意味がわかりません。 回答はー1です。 「>>演算子によるシフトでは符号ビットが拡張される」 意味がわかりません・・・(@_@) 「>>>演算子であったなら、符号ビットがゼロになるのでN=1となる」 え・・・???!!! ふごーびっと??? シフト演算子ですから、 「-1の31こ右にビットをシフトする」 んだな・・・と思ったところ、 まったくどう考えてよいのかわからず、 回答を見たところ、余計わからなくなりました。 だれかたすけてください(T_T)
- ベストアンサー
- Java
- 論理演算について
Cを勉強中の者です。論理演算についてよくわからいことがあります。 以下のソースコードを実行し結果が真なら0001、偽なら0000が出力されるプログラムを作りました。 #include <stdio.h> int main(void) { unsigned short a = 0x1234; unsigned short b = 0xfafc; unsigned short c = 0xcdef; unsigned short x, y; x = a && b; y = b && c; printf("x=%04x\n", x); printf("y=%04x\n", y); return 0; } 結果はx=0001, y=0001となります。y=0001はbとcの文字列がそれぞれfとcをを持っているので演算による結果は納得できますが、x=0001はaとbの文字列には共通するものがないのになぜx=0000ではないのでしょうか? また0xが頭に付く表現は16進数だと強調するためにあるのですか? 説明に不足があればまた足しますのでよろしくお願いします。
- ベストアンサー
- C・C++・C#
- Oracleでビット演算はできますか?
Oracleではビットごとの論理演算はできるでしょうか? たとえば、 select * from xxx where (flags & 32)=0 というようなことをやりたいのですが、可能でしょうか?
- ベストアンサー
- Oracle
- 論理演算、ビット演算
C言語仕様上、真/偽は(Not0/0)であることは理解しています。また、処理順序から、論理演算とビット演算では評価対象の範囲が違うことも知っているつもりです。 その上で質問させていただきます。 お手数ですが、お解りになる方は教えていただけると助かります。 例えば、 i=0,j=0である場合 ( (i == 0) && (j == 0) )は真であると思いますが、 ( (i == 0) & (j == 0) )は規定されているでしょうか。 また、( (i == 0) | (j == 0) )は真となることが(理論上)保証されているように思えますが、問題ないでしょうか。 以上、よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- 昇降演算子のブラケットの問題
昇降演算子のブラケットの問題 以下の問題を解いたら、 ψ=D*exp(-cx^2/2)(c、Dは定数)となり、 下記画像の(5)式を使いませんでした。 どうやったら(5)式を使うのでしょうか。 どなたか教えていただけるとうれしいです。 -- 質量m、角振動数ωの1次元調和振動子の ハミルトニアンは(1)式で与えられる。 ここでp(^は省略します)は運動量演算子、 xは位置演算子であり、交換関係[x,p]=xp-px=ih/2πを満たす。 また、(2)、(3)で定義される2つの演算子を考える。 演算子N=a†aの固有値をnとし、 その規格化された固有状態を|n>とする。 すなわちN|n>=n|n>,<n|n>=1である。 次の2つの関係式が成り立つ。 a†|n>=√(n+1)|n+1>, a|n>=√n|n-1> 上記で定義された固有状態|n>の規格化された波動関数を ψ_n(x)=<x|n>とする。 ここで、|x>は演算子x(^は省略します)の固有状態である。 基底状態|0>の満たす条件a|0>=0を用いて、 ψ_0(x)=<x|0>を求めよ。なお、(4)、(5)の関係式を用いてもよい。
- ベストアンサー
- 物理学
お礼
大変参考になりました。ありがとうございます。