サンプル問題6(シフト演算)について
INTJ高校生さん
(No.1)
サンプル問題6(シフト演算)について
なぜアルゴリズム中に「rに、取り出した数字を右から入れろ」という命令がないのに多くの参考書や解説動画は勝手に右から入れているんでしょうか?なぜそうするかという「アルゴリズムの気持ち」は理解できています。アルゴリズムってそういう記述されていない勝手な事もしていいのですか?
なぜアルゴリズム中に「rに、取り出した数字を右から入れろ」という命令がないのに多くの参考書や解説動画は勝手に右から入れているんでしょうか?なぜそうするかという「アルゴリズムの気持ち」は理解できています。アルゴリズムってそういう記述されていない勝手な事もしていいのですか?
2024.01.12 21:58
boyonboyonさん
★FE シルバーマイスター
(No.2)
右から入れているようにも見えますが、この問題では最下位ビットとrの論理和をとっています。
0と1だけでは、分かりにくいのでアルファベットを使ってみます。
byte=abcdefgh (a,b,c,d,e,f,g,hは、0または1)
rbite=abcdefgh
r=00000000
アの処理を繰り返します。
1回目
r<<1 → r=00000000
rbyte ^ 00000001 → 0000000h=*
r V * → 0000000h → r
rbyte>>1 → rbyte=0abcdefg
2回目
r<<1 → r=000000h0
rbyte ^ 00000001 → 0000000g=*
r V * → 000000hg → r
rbyte>>1 → rbyte=00abcdef
・・・・・
8回目
r<<1 → r=hgfedcb0
rbyte ^ 00000001 → 0000000a=*
r V * → hgfedcba → r
rbyte>>1 → rbyte=00000000
こんな流れなので、右から入れているわけではありません。
0と1だけでは、分かりにくいのでアルファベットを使ってみます。
byte=abcdefgh (a,b,c,d,e,f,g,hは、0または1)
rbite=abcdefgh
r=00000000
アの処理を繰り返します。
1回目
r<<1 → r=00000000
rbyte ^ 00000001 → 0000000h=*
r V * → 0000000h → r
rbyte>>1 → rbyte=0abcdefg
2回目
r<<1 → r=000000h0
rbyte ^ 00000001 → 0000000g=*
r V * → 000000hg → r
rbyte>>1 → rbyte=00abcdef
・・・・・
8回目
r<<1 → r=hgfedcb0
rbyte ^ 00000001 → 0000000a=*
r V * → hgfedcba → r
rbyte>>1 → rbyte=00000000
こんな流れなので、右から入れているわけではありません。
2024.01.12 23:04
INTJ高校生さん
(No.3)
rを書き換える流れがいまいち把握できていませんでした。おかげで理解できました!ありがとうございます!
2024.01.12 23:31
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告