ページ 11

メモリ操作

Posted: 2015年8月05日(水) 22:39
by manman
C言語を利用しています。
int型のデータ 16909060 を1Byteずつ取り出して表示するプログラムを作りたいのですが、
最終的に、 4 3 2 1 と表示されれば正解ですか?

Re: メモリ操作

Posted: 2015年8月05日(水) 22:44
by Dixq (管理人)
あれ、既にほぼ同じ問題に回答しましたが、
http://dixq.net/forum/viewtopic.php?f=3&t=16864
こちらとは別件ですか?

Re: メモリ操作

Posted: 2015年8月05日(水) 22:45
by みけCAT
manman さんが書きました:int型のデータ 16909060 を1Byteずつ取り出して表示するプログラムを作りたいのですが、
最終的に、 4 3 2 1 と表示されれば正解ですか?
わかりません。問題の仕様によります。
その問題は全角文字で出力する問題なのですか?
ちなみに、十進数の16909060は十六進数で1020304と等しいです。

Re: メモリ操作

Posted: 2015年8月05日(水) 22:52
by Dixq (管理人)
ちなみにみけCAT君の回答の値は普通のwindows標準電卓で計算できます。
添付ファイルをご覧ください。
tmp.png

Re: メモリ操作

Posted: 2015年8月05日(水) 22:58
by manman
バイトオーダーに気を付けて、16909060=1*256*256*256+1*256*256+3*256+4
より、変数に16909060を代入して確認しました。
1 2 3 4 か 4 3 2 1か微妙なところです。

Re: メモリ操作

Posted: 2015年8月05日(水) 23:05
by みけCAT
manman さんが書きました:バイトオーダーに気を付けて、16909060=1*256*256*256+1*256*256+3*256+4
より、変数に16909060を代入して確認しました。
1 2 3 4 か 4 3 2 1か微妙なところです。
対象のマシンによります。
x86などのリトルエンディアンのマシンでは下位アドレスから順に4 3 2 1、
MIPSなどのビッグエンディアンのマシンでは下位アドレスから順に1 2 3 4でしょう。
その他のエンディアンのマシンでは、その他の並びになるでしょう。

【追記】ググったらMIPSのエンディアンは「バイエンディアン」と言って切り替えられるらしいです。

Re: メモリ操作

Posted: 2015年8月05日(水) 23:06
by Dixq (管理人)
環境に依存します。
出題された問題が明確じゃないので回答も明確にできません。
また、int型のデータをどちらから順に表示する問題なのでしょうか?
上から?下から?

また、
> 16909060=1*256*256*256+1*256*256+3*256+4

これは

コード:

int a = 1<<24 | 2<<16 | 3<<8 | 4;
このように書いた方が見やすくて簡単ですよ。