平成23年秋期  問1

今度こそ受かりたいさん  
(No.1)
この問題がわかりません。
右シフト2の乗数で割る。
左シフト2の乗数かける。
なぜmod256をする必要があるのでしょうか?
2023.06.08 22:13
今度こそ受かりたいさん  
(No.2)
boyonboyonさん 
AP シルバーマイスター
(No.3)
XXXXXXXXYYYYYYYYを
YYYYYYYYXXXXXXXXにするので、

XXXXXXXXYYYYYYYY div 256 = 00000000XXXXXXXX  (右に8ビットシフトと同じ)

XXXXXXXXYYYYYYYY mod 256 = 00000000YYYYYYYY 
に256をかけると  YYYYYYYY00000000  (左に8ビットシフトと同じ)
XXXXXXXXYYYYYYYY * 256 をいきなりやるとオーバーフローしてしまうので予防のため  mod 256していると思います。

YYYYYYYY00000000+00000000XXXXXXXX=YYYYYYYYXXXXXXXX
で上位8ビットと下位8ビットが入れ替わります。
2023.06.08 23:00
Howitzerさん 
(No.4)
問題ではデータが16ビットだと言っていますが、
変数(もしくはレジスタ)のサイズには言及がないです。
16ビット変数/レジスタで考えるとオバーフローしてくれるので mod 256 は不要です。
しかし、例えば32ビット変数/レジスタで考えると....
xが HHHHHHHHLLLLLLLL のとき、mod256 なしでは
HHHHHHHHLLLLLLLLHHHHHHHH になってしまいます。
2023.06.09 09:31
boyonboyonさん 
AP シルバーマイスター
(No.5)
>Howitzerさん
的確なご指摘ありがとうございます。
オーバーフローしては駄目だと思っていました。

mod 256は、下位8ビットだけを取り出すためですね。
勉強になりました。
2023.06.09 11:39
今度こそ受かりたいさん  
(No.6)
ありがとうございました。
mod256する理由がわかりました。
そもそも論で申し訳ないのですが、
XXXXXXXXYYYYYYYY mod 256 =00000000YYYYYYYY 
256で割ると下位8ビットのみ残る理由がわかっていません。教えていただけると助かります。
2023.06.09 12:19
Howitzerさん 
(No.7)
今度こそ受かりたいさん

mod は割り算ではなく、割り算の余りを求める演算子です。
割り算を A=Bq+r とすると、割り算の結果(商)は q で、Modの結果は r です。

XXXXXXXXYYYYYYYY のうち X の部分は256の倍数なので、256で割って割り切れます。
Y の部分は256で割ったときの余りに相当します。(余りなので、0~255に収まります。)
そのため 256でModすることで、下位8ビット(0~255)が残ります。

例えば mod4 なら下位2ビットが得られます。
0~10を4で割り算して余りを調べると0~3が循環して
結果的に下位3ビットが得られることがわかると思います。
※Excelの関数にもMODがあります。

boyonboyonさん
boyonboyonさんのオーバーフローの書き込みを読んでひらめきました。
2023.06.09 13:11
今度こそ受かりたいさん  
(No.8)
Howitzerさん
ありがとうございます。
そういうことでしたか。
256=2の8乗以上のビットだと割り切れるので、0下位8ビットは割り切れないのであまりになることわかりました。
おかげさまでこちらの問題の理解できました。
2023.06.09 13:47
Howitzerさん 
(No.9)
お役に立ててよかったです。

訂正
誤:結果的に下位3ビットが得られることがわかると思います。
正:結果的に下位2ビットが得られることがわかると思います。
でした。

「割り算を A=Bq+r とすると、」も
「割り算A÷Bを A=Bq+r と表すと、」としたほうがよかったですね。
2023.06.09 16:06

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop