基本情報技術者試験的な備忘録 科目B サンプル問題問6 python

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 ビット演算 超入門