2023基本情報技術者試験的な備忘録 科目B サンプル問題問6 python
パソコン素人です。
プログラム素人です。
基本情報技術者試験の問題・テキスト等を見て気になったメモです。
多分間違っているのであまり見ないで下さい。すみません。
(記載内容や参考にしたネット情報など問題がありましたら、早急に削除いたします。)
先日まで知らなかったのだけど、2023から変わる基本情報技術者試験のサンプル問題が
フルセット(科目A・科目B)で出ている。
昨年調べた時は科目Bもサンプル問題が6題だけだったが、20題(100分)のが、
IPAで公開されている。
https://www.ipa.go.jp/news/2022/shiken/tsunen.html
「出典:基本情報技術者試験(科目A試験) サンプル問題セット」
「出典:基本情報技術者試験(科目B試験) サンプル問題セット」
で、サンプル問題の科目B のビット演算。
サンプル問6
選択肢・答えを見てもピンと来ない。
そもそも「ビット演算」は何に使うのか???
〇ネットで見ると、最近はあまり使わないらしい。UNIX系OSで使う。
〇ネットで見ると、ファイルの属性の判別に使ったりするらしい。
(参考:もう一度基礎からC言語 第19回 いろいろな演算子 様感謝)
例えば10ビットで、
0111011000など設定しておいて、各ビットが、フラグになっていて、
3桁ごとに各ユーザーの権限を入れたりするとか(一般ユーザーは書き込み禁止とか)。
〇ネットで見ると、ビットの一部を入れ替える(ビット演算する)ことで、
2枚の画像を合成したりできるらしい。
(参考:Pythonビット演算 超入門 様感謝)
〇他にも計算が簡単
桁をシフトすることで、2倍や1/2にするだけでなく、工夫すれば、割り算や余りも出せる。
*******************************************
で、最初にVBAでできないかやってみる。
(参考:'t -hom 's diary 主にVBAネタを扱っているブログです。様感謝)
Sub test10()
Debug.Print 3 And 5
'結果は1
Debug.Print 3 Or 5
'結果は7
End Sub
VBAでは2進数そのままは扱えないようだ。(工夫するしかないか。)
だから、上記は10進数でやっている。
3と5の論理積は1
10進数では意味わからないが、2進数で
011と101の論理積は001ということ。
3と5の論理積は7
10進数では意味わからないが、2進数で
011と101の論理和は111ということ。
今まで、2進数はコンピュータに分かるため、10進数は人間が分かるため、
と考えてきたが、うまく言えないが2進数の計算結果は10進数の計算結果とは異なるんだなと思った。
(上記の結果は1や結果は7は、10進数での計算ではない。)
うまく言えないが、2進数は、01の「羅列」が意味を持ち、羅列どうしを切ったり貼ったり?するんだな。
(計算としては1←→0しかない。地図というか、01の羅列模様が意味を持つ。うまく言えません。)
で、pythonで問題をやってみる。
python素人です。paiza_ioでやる。
****************************************
rbyte = int(0b01001011)
r = int(0b00000000)
for i in range(1,9):
r = (r << 1) | (rbyte & int(0b00000001))
rbyte = rbyte >> 1
print(bin(r))
****************************************
選択肢アを上記のように記載。
うまく反転する。
0bは2進数の接頭辞(プレフィックス)
追記:使い方メモ(未整理)
ビット演算・・・論理演算子を使うこと(論理積や排他的論理和など)
フラグを立てる・・・000 or 001(1桁目1立てる)
フラグを取得・・・??? and 001(1桁目取得)
フラグを下ろす
パイソン
<< 左論理シフト
<< 右論理シフト
^ 排他的論理和
~ 反転
他に参考したサイト(感謝)
@7shi
Python ビット演算 超入門