LoginSignup
0
0

More than 3 years have passed since last update.

論理演算、シフト演算

Posted at

論理演算

2進数値0と1で演算する方法
1を真(True)、0を偽(False)とする

  • 論理積(AND) ・・・ AとBのビットが両方とも1ならば、結果は1。それ以外は0。(掛け算)
  • 論理和(OR) ・・・ AとBのビットが両方とも1、または一つでも1ならば結果は1。両方0ならば0。(足し算)
  • 否定(NOT) ・・・ Aが0ならば、結果は1。Aが1ならば、結果は0。
  • 排他的論理和(XOR) ・・・ AとBのビットが両方とも1または両方とも0ならば、結果は0。それ以外は1。
A B A AND B A OR B A XOR B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
A NOT A
0 1
1 0

複数ビットの演算の場合

各桁ごとで演算


\begin{matrix}
&1010 \\
AND &1100 \\
\hline
&1000
\end{matrix}


\begin{matrix}
&1010 \\
OR &1100 \\
\hline
&1110
\end{matrix}

シフト演算

桁を移動させる操作

一番左側のビット(符号ビット)の扱いで論理シフト算術シフトに分かれる

数値を2倍や1/2倍にしたいときに使用する

数値を1ビット左シフトするごとに2倍、1ビット右シフトするごとに1/2倍になる(つまり、2ビット左シフトだと4倍したことになる)

  • 論理シフト ・・・ 全体をずらす(シフトしたことにより桁あふれをしたビットは捨てて、空いたビットには0を補う)

1 1 0 0 1 1 0 1

↓ 左に2ビット論理シフト(あふれた桁は捨てる

0 0 1 1 0 1 0 00を補う

↓ 右に2ビット論理シフト(あふれた桁は捨てる)

0 0 0 0 1 1 0 1


  • 算術シフト ・・・ 最上位(符号)ビットは固定し、それ以外はずらす

1 1 0 0 1 1 0 1

↓ 左に2ビット算術シフト(あふれた桁は捨てる)

1 0 1 1 0 1 0 0最上位ビットだけ残して、あふれ桁を捨てる

↓ 右に2ビット算術シフト(あふれた桁は捨てる)

1 1 1 0 1 1 0 1最上位ビットと同じ値を補う

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0