みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

論理シフトについて

コンピュータの論理シフトについて質問があります。
シフトしてオーバーフローした場合は、コンピュータ内部においては演算結果が反映されているのでしょうか?
例えば、8ビット表記で
(10100001)_2 =(161)_10
で左に一桁シフトしたとすると
(01000010)_2 =(66)_10
という表記になると思うのですが、このようなシフトをすると値が小さくなってしまう
という考え方をすればいいのでしょうか?

回答よろしくおねがいします。

投稿日時 - 2015-01-09 23:37:10

QNo.8885980

困ってます

質問者が選んだベストアンサー

シフトしてオーバーフローした場合は、コンピュータ内部においては演算結果が反映されているのでしょうか?



演算結果が反映されているか?



★回答 工学的に人為的に製作者により決定される

製作された言語 アプリ の仕様で決まるのが正解である
メーカー によりちがう
仕様どうり コンピュータ内部においては演算結果が反映されている


★回答 説明

演算結果を制限するものは 以下であり ソフトでそれを解消して仕様を決める

(1)デジタルコンピューター(マイコン DSP その他全部)のレジスターの仕様 メモリー仕様

(2)そのデジタルコンピューター上で走らせるソフト アプリ

任意多倍長計算が可能なのもあるわけ
商用の数式処理システムとしては Maple や Mathematica その他が可能
言語はその仕様に有効数字が記載されてる

(3)アプリは 言語アプリで作成されるのでその仕様で決まる

言語はその仕様に有効数字が記載されてる
アセンブラは マシン語 に近い仕様がほとんどだ


※注意 ちゃんとマニュアルに書いてあるはずだ



★推定法は以下でOK

たとえば 仮数部は

0.5^推定有効bit数-1 を計算させてみると 言語仕様は推定可能

-1が出たらそこが限界だ


たとえば49bitで
-0.999999999999998000000000000000


たとえば50bitで
-0.999999999999999000000000000000


たとえば51bitで
-1.000000000000000000000000000000

となる たとえばエクセルはそうなる

投稿日時 - 2015-01-11 21:23:28

お礼

基本情報技術者試験の参考書ではそのような内容が書いていなかったのですが納得いきました。回答ありがとうございました

投稿日時 - 2015-01-14 13:50:44

ANo.4

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

>コンピュータ内部においては演算結果が反映されているのでしょうか?

意味がよくわかりませんが、機械語/アセンブリ言語のレベルだと、
シフト命令実行後に「キャリーフラグ」などと呼ばれるフラグが立つように、
大抵は作られています。よほど低機能なCPUでもない限り。

その後、仕様に応じたソフトウェア処理を行えばいいです。
多桁のシフトを実現したいなら上位桁にシフトインするように処理すればいいし、
オーバーフローが生じ値が不正確な事を警告するだけならそうすればいいし。
特に何も必要ないなら何もしなければいいし。

>値が小さくなってしまうという考え方
空位である"0"がシフトアウトされたり数値"0"が上の桁に移動しても何も起こってないのと
同じですが、
"1"だとそうはいきません。
8bitで表現できる範囲を越えてしまったのですから、8bitだけで表現してももはや不正確です。
というか、押し出され失われた分が、数値ならばちょうど分小さくなります。


余談ですが、1bit左シフトすることは数値を2倍する事と実は同じです。
(10進数でも1桁左シフトし(て最下位に"0"を付加することを「10倍する」といいます)

投稿日時 - 2015-01-10 05:01:26

お礼

回答ありがとうございました。

投稿日時 - 2015-01-14 13:51:42

ANo.2

>このようなシフトをすると値が小さくなってしまうという考え方をすればいいのでしょうか?
しても良いし、しなくても良い。

10100001が01000010に変化したのをどのように捉えるかはその目的次第。

ビットの変化はハードウエアの世界だがそれをどのような意味づけするかはソフトウエアの世界。

投稿日時 - 2015-01-10 00:03:26

お礼

回答ありがとうございます。結局は、ものによって考え方が違うことなのですね

投稿日時 - 2015-01-14 13:49:23

ANo.1

「オーバーフロー」なので「上位ビットは切り捨て」られます。
なので「値は小さくなります」ですね。

ただし最上位ビットが符号の場合は左シフトでもマイナスからプラスになる場合は大きくなりますね。

投稿日時 - 2015-01-10 00:01:48

お礼

回答ありがとうございました

投稿日時 - 2015-01-14 13:51:08

あなたにオススメの質問