他カテゴリ

基本情報技術者試験のお勉強 ~ベン図と論理演算

nonstop-iida's icon'
  • nonstop-iida
  • 2020/03/02 23:57
Content image

こんにちわこんばんわこんばんこ。

こんな時期(現在、2020年3月2日)に風邪を引いたと思われる飯田です。

風邪なのか、なんなのか?わからないけど、検査を受けるような症状ではないことは確かです。

今日も勉強した内容にPythonを絡めてアウトプットしていきたいと思います。

1.ベン図ってなんだっけ?

ベン図って普段使いますか??割と仕事している時に物事を整理して考えるときに利用すると思います。

僕がよく使うのは、情報系システムでデータ抽出を行う際に、どのような項目でどのような条件設定であれば欲しいデータが取れるかを考える際に、なんとなく使っていたりします。

Content image

例えば、一人暮らししている社会人の顧客を抽出したい場合、「配偶者」や「同居人数」、「勤務先」といった項目を項目として利用し、それぞれ、「無し」・「0人」・「有」といった形でデータ抽出すると欲しいデータが抜けますよね。

今日はこのベン図と、集合、それからコンピューターにおける論理演算についてアウトプットしたいと思います。

2.集合について

自社の顧客、日本国民、世界人口、切り方はどれでもいいですが、とにかくまずは全体を決め、そこから部分を特定します。(上でいうと、社会人と一人暮らしですね)

集合とは、全体を決めて、その中で特定の条件に合致する部分を特定するためのもの・・・だと理解しました。(間違ってたら教えてプリーズ笑)

今回は、全体を自社の顧客とし、一人暮らしをAの集合社会人をBの集合とします。

(1) 論理積 (A & B)

コンピューターは1か0かで演算をするので、自社の顧客のうち、社会人かつ一人暮らしの顧客の集合をCとすると、CはA = 1 & B = 1 となります。

Content image

Cを求める方法を「論理積」といいます。

ちなみに、コンピューターにおける論理演算で論理積がどのように行われるかというと、2進数同士の桁を比較し、双方が1の場合は1、それ以外の場合は0という演算を行います。

Pythonでも実行してみましょう。(論理積のビット演算子は & です)

Content image

 

 

 

ん・・・?42がそのまま出てきました。

ではこれを2進数にして見てみましょう。

Content image

 

 

 

 

 

分かりましたか?10進数42は2進数「101010」、10進数58は「111010」、それぞれの桁を比較し、どちらも1の桁のみ1とし、それ以外は0とすると・・・

計算結果は「101010」、42のままとなるんですね。

(2) 論理和 (A | B)

次に論理和を見てみましょう。論理和とは、A or Bのことで、AかBいずれかに所属する集合ということです。つまり、社会人で同居人数が2人以上、もしくは社会人以外の一人暮らし(学生や年金暮らしの老人等)、あるいは一人暮らしかつ社会人ということになります。

Content image

 

上の図の赤と黄色とオレンジの部分(C)いずれかに該当する部分が、論理和です。(いずれかに該当という言い方が分かりやすいですね)

Pythonでは論理和を求める場合、A ❘ Bとして計算します。

やってみると・・・

Content image

 

 

 

先ほどと異なり、今度は58となりました。では、これも2進数に変換して見てみましょう。

Content image

 

 

 

 

 

いずれかが1であれば、1となっていますね。先ほどの論理積と比較すると左から2桁目が論理積では0となりましたが、論理和では1となりました。

(3) 排他的論理和 ( A XOR B )

排他的論理和は、A・Bいずれかのみに該当するものの集合です。

先ほどの論理和と異なるのが、論理積の部分(オレンジ部分)が対象から外れているところです。

Content image

ちなみに、排他的論理和はPythonでは演算子^で計算します。

Content image

 

 

 

 

 

 

排他的論理和の場合、共通部分は対象外(0)となるため、計算結果は10000(10進数16)となります。

(4) 否定 (Not)

否定は簡単にいうと、A・Bいずれにも属さない部分の集合を表します。

ベン図でいうと、水色の部分。

Content image

AでもBでもないので、否定です。

予想は着くと思いますが、2進数では1,0を反転させる動きとなります。

ビット演算子は~で右辺のみに数字を入れます。

ビット演算してみると、

Content image

 

 

 

 

 

となります。PythonのNot演算をした場合、-(3+1)となる値を返すようになっています。この-(3+1)ってどっかで見たことありますよね。

絶対値にマイナスを付けた状態での出力となります。

単純に反転させたビットを符号付き2進数として出力したい場合は、以下の通り出力します。

Content image

 

 

 

8ビット表示させる時は、0xff。4ビットの時は0xfと、必要なビット桁数の最大値との論理積を出力することで符号付き2進数で出力ができます。左端1桁が符号(1なのでマイナス)です。

↓符号付き2進数については、こちらを参照

ラストにNOT演算を使ってみます。

Content image

alというリストに格納された0~9までの数字を出力するような記載です。

が、出力の際にnot演算子を「~」を付けています。これによりビット反転で、負の数字が出力されるはずですが、そうなりますでしょうか。

Content image

 

予想通りの結果となりましたね。

こんな使い方もできるので、数値であればビット演算子を今後は使っていくことを意識したいと思います。

なんとなくor演算とかifを使わずに条件式的なことができそうですよね。

 

 

 

理解せず丸暗記は流石にきつい内容ですね。でも、ちょっとだけでも分かってくると、なんだかワクワクしてくる内容ですよね。

最後まで読んでいただきありがとうございました。

 

 

Article tip 0人がサポートしています
獲得ALIS: Article like 48.68 ALIS Article tip 0.00 ALIS
nonstop-iida's icon'
  • nonstop-iida
  • @nonstop-iida
ノンストップ飯田と申します。会社員ですが、趣味でやってるPythonと歌うのが好きです。曲も書きます。twitter:@nonstop_iida

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
トラベル

梅雨の京都八瀬・瑠璃光院はしっとり濃い新緑の世界

Like token Tip token
216.64 ALIS
Eye catch
トラベル

わら人形を釘で打ち呪う 丑の刻参りは今も存在するのか? 京都最恐の貴船神社奥宮を調べた

Like token Tip token
486.35 ALIS
Eye catch
他カテゴリ

SASUKEオーディションに出た時の話

Like token Tip token
35.87 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
114.82 ALIS
Eye catch
他カテゴリ

テレビ番組で登録商標が「言えない」のか考察してみる

Like token Tip token
26.20 ALIS
Eye catch
他カテゴリ

警察官が一人で戦ったらどのくらいの強さなの?『柔道編』 【元警察官が本音で回答】

Like token Tip token
114.82 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
121.79 ALIS
Eye catch
他カテゴリ

オランダ人が語る大麻大国のオランダ

Like token Tip token
46.20 ALIS
Eye catch
ビジネス

海外企業と契約するフリーランス広報になった経緯をセルフインタビューで明かす!

Like token Tip token
16.10 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
ゲーム

【初心者向け】Splinterlandsの遊び方【BCG】

Like token Tip token
6.32 ALIS