テストの振り替えでもするか。
2010年1月22日 日常の事終わった事を考えるのはあまりよくないことだけど、
今後使っていく知識だから覚えてるうちに確認するべきだと思うんだ。
ここからは一人で電卓叩きながら書き綴るので非常に面白くありません。
プログラミング演習・試験。
50を24.25倍するプログラムを作りなさい。
って問題だったなー。
アセンブラ言語でプログラム作るんだけど、
これは単純な掛け算ができない!
まず、単純に50x24.25を計算するといくつだろう。
1212.5か。これはテストの時、手計算で答えだして書いた気がするが正解だったな。
アセンブラ言語では乗算というものはたぶんありません?
んじゃ掛け算できねーのかというとできます。
算術左シフト命令を応用するとできるのです。
逆に算術右シフトすると割り算なわけです。
1ビット左に算術左シフトすると2倍になります。
2ビット左シフトすると4倍になります。
つまりnビット左シフトすると2^n倍になるのです。
逆にnビット右シフトすると1/2^n倍になるわけです。
(0001)2=1 1ビット左シフトすると
(0010)2=2 2倍になってるでしょ!さらに1ビット左シフトすると
(0100)2=4 また2倍に!元の値から比較すると2ビットシフトで4倍です!
これ習った時感動したんだがwwwwwwwww
まぁこれを応用する問題のはずなのです。
ここで問題なのが24倍なんて普通にはできんのです。
2 4 8 16 32 …
16倍から32倍に飛んでしまうのですよ。
というわけで5分くらい頭を捻って閃いたのです!
足し算?足し算、足し算…ああ、足し算!お前か足し算!!!フハハハハ!
どういうことかというとまず50x16をします。
これは4ビット左シフトすればいいので可能です。
答えは「800」か。でこれを実際はGR1に放り込む。
次に50x8を計算します。
これは3ビット左シフトすればいいので可能です。
答えは「400」これをGR2に放り込みます。
算術加算でGR1とGR2を足します。
これは暗算で余裕だなw「1200」これをGR1に放り込みます。
上の計算をまとめると50x16+50x8を計算したわけです。
50x24=1200 お、ここまでは合ってますね!
結果的に上のやり方で24倍を実現できたようです。
これに50を0.25倍した数を1200に足せば1212.5になりそうな気がしてきましたね!
0.25は分数にすると1/4です。
2ビット右シフトすればできそうなのでやります。
50x1/4をすると「12.5」になります。これをGR3にでもぶち込んでおきますか。
あとはGR1=1200とGR3=12.5を算術加算すると…
ちょうど「1212.5」になりますね!!!
ということはあのプログラム正解だったのかぁぁぁぁぁぁぁ。
なんという自己満足。お疲れ様でした。
つか、試験中いきなりこんな計算思いつくかよwwwwwwwww
思いついた自分を全力で褒めたい。
3問目はプログラム貼るだけだったんだけど、
時間足りなくてあと2行書けば完成ってとこで終わった。
でも、一応貼り付けておいた。
書き込む数値もわかってたのに、タイピングがもう少し速ければ・・・
って感じだったなぁ。
また明日から試験勉強が始まるお。。。
今日くらい休んでもいいよね!
でも試験勉強楽しいから困る。
おしまい。
今後使っていく知識だから覚えてるうちに確認するべきだと思うんだ。
ここからは一人で電卓叩きながら書き綴るので非常に面白くありません。
プログラミング演習・試験。
50を24.25倍するプログラムを作りなさい。
って問題だったなー。
アセンブラ言語でプログラム作るんだけど、
これは単純な掛け算ができない!
まず、単純に50x24.25を計算するといくつだろう。
1212.5か。これはテストの時、手計算で答えだして書いた気がするが正解だったな。
アセンブラ言語では乗算というものはたぶんありません?
んじゃ掛け算できねーのかというとできます。
算術左シフト命令を応用するとできるのです。
逆に算術右シフトすると割り算なわけです。
1ビット左に算術左シフトすると2倍になります。
2ビット左シフトすると4倍になります。
つまりnビット左シフトすると2^n倍になるのです。
逆にnビット右シフトすると1/2^n倍になるわけです。
(0001)2=1 1ビット左シフトすると
(0010)2=2 2倍になってるでしょ!さらに1ビット左シフトすると
(0100)2=4 また2倍に!元の値から比較すると2ビットシフトで4倍です!
これ習った時感動したんだがwwwwwwwww
まぁこれを応用する問題のはずなのです。
ここで問題なのが24倍なんて普通にはできんのです。
2 4 8 16 32 …
16倍から32倍に飛んでしまうのですよ。
というわけで5分くらい頭を捻って閃いたのです!
足し算?足し算、足し算…ああ、足し算!お前か足し算!!!フハハハハ!
どういうことかというとまず50x16をします。
これは4ビット左シフトすればいいので可能です。
答えは「800」か。でこれを実際はGR1に放り込む。
次に50x8を計算します。
これは3ビット左シフトすればいいので可能です。
答えは「400」これをGR2に放り込みます。
算術加算でGR1とGR2を足します。
これは暗算で余裕だなw「1200」これをGR1に放り込みます。
上の計算をまとめると50x16+50x8を計算したわけです。
50x24=1200 お、ここまでは合ってますね!
結果的に上のやり方で24倍を実現できたようです。
これに50を0.25倍した数を1200に足せば1212.5になりそうな気がしてきましたね!
0.25は分数にすると1/4です。
2ビット右シフトすればできそうなのでやります。
50x1/4をすると「12.5」になります。これをGR3にでもぶち込んでおきますか。
あとはGR1=1200とGR3=12.5を算術加算すると…
ちょうど「1212.5」になりますね!!!
ということはあのプログラム正解だったのかぁぁぁぁぁぁぁ。
なんという自己満足。お疲れ様でした。
つか、試験中いきなりこんな計算思いつくかよwwwwwwwww
思いついた自分を全力で褒めたい。
3問目はプログラム貼るだけだったんだけど、
時間足りなくてあと2行書けば完成ってとこで終わった。
でも、一応貼り付けておいた。
書き込む数値もわかってたのに、タイピングがもう少し速ければ・・・
って感じだったなぁ。
また明日から試験勉強が始まるお。。。
今日くらい休んでもいいよね!
でも試験勉強楽しいから困る。
おしまい。
コメント