K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2061] 【C言語ポインタ完全制覇】バイトオーダー、向き?
返信


投稿者:knwifuru
2017/12/19 08:23:16

Link:
第1版p135, 第2版p156の、byteorder.cの実行直後の文、『私の環境では「0x12345678」という値は、メモリ上に、逆向きに配置されているようですね。』とあるのですが、何とは「逆向き」に、なのかがわかりません。何と逆向きなのでしょうか?

(ぱ)さんの環境(little endian)で、78->56->34->12と表示されている、というのは、下の位から上の位にメモリアドレスが増えていっているので、僕には、逆ではなく【順に】に思えるのです。
数字の左から右(読む向き)とは【逆】という事でしょうか? 確かに、それとは逆ではありますが…

しかし、もともと、endianというのは、「卵の尖った側(小さい側)から(先に)食べるか、丸い側(大きい側)から食べるか」=「bit/byte列のlower bits側が先に(lower addressに)置かれるか、higher bitsが先に置かれるか」という事のようなので、数字を印刷・表示した時・読んだ時に先に・早く出てくるかどうか?で議論をすると、混乱すると思うのですが、いかがでしょうか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2067] Re:【C言語ポインタ完全制覇】バイトオーダー、向き?
返信


投稿者:(ぱ)こと管理人
2017/12/20 00:13:05

Link:
>第1版p135, 第2版p156の、byteorder.cの実行直後の文、『私の環境では「0x12345678」と
>いう値は、メモリ上に、逆向きに配置されているようですね。』とあるのですが、
>何とは「逆向き」に、なのかがわかりません。何と逆向きなのでしょうか?

「0x12345678」という16進の表記と逆向き、という意味で書いています。

>(ぱ)さんの環境(little endian)で、78->56->34->12と表示されている、
>というのは、下の位から上の位にメモリアドレスが増えていっているので、
>僕には、逆ではなく【順に】に思えるのです。

うーん、主観の問題とは思いますが、どうなんでしょう。
「下の位を先にメモリに格納する」というのは、コンピュータの事情としては
わかるケースもありますが、通常、人間は、数字を印刷・表示した状態の順序で
意識しているのではないでしょうか。過去、この話を新人君やお客様にしたことは
何度かありますが、私の経験した範囲では、「へー、逆なんだ」という反応でした。
ポインタ完全制覇の初版が出てから17年、この点で違和感を表明したのは
knwifuruさんが最初です(もちろん、表明しなかっただけで、違和感を感じていた人は
いたのかもしれません)。

>しかし、もともと、endianというのは、「卵の尖った側(小さい側)から(先に)食べるか、
>丸い側(大きい側)から食べるか」=「bit/byte列のlower bits側が先に(lower addressに)
>置かれるか、higher bitsが先に置かれるか」という事のようなので、
>数字を印刷・表示した時・読んだ時に先に・早く出てくるかどうか?で議論をすると、
>混乱すると思うのですが、いかがでしょうか?

まあこれはendianを知らない人向けの説明なので、「もともとendianというのは〜」で
説明してもあまり意味はなく、「数字を印刷・表示した時・読んだ時」の順と
逆になっていることから、「そんなこともあるんだ、へー」と思ってもらえば
よいかと思っています。
「へー、逆なんだ」と思わない人は、knwifuruさんの他にもいるのかもしれませんし、
実のところどっちが多数派なのかもわかりませんが、本の書き手としては、
「想定読者は過去の自分自身」という視点から逃れられないものなのかもしれません。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2070] Re:【C言語ポインタ完全制覇】バイトオーダー、向き?
返信


投稿者:knwifuru
2017/12/20 07:43:34

Link:
返信ありがとうございます。

endianについては、VAX/VMSやらPC98やらをいじっているその昔から(トシがばれる(^^;)苦労させられてきていて、中身はわかっているつもりですので、「何と逆なのか」を明示して頂ければ、僕はそれだけで充分です。(僕が細かすぎですかね?(笑))

>>第1版p135, 第2版p156の、byteorder.cの実行直後の文、『私の環境では「0x12345678」と
>>いう値は、メモリ上に、逆向きに配置されているようですね。』とあるのですが、
>>何とは「逆向き」に、なのかがわかりません。何と逆向きなのでしょうか?
>
>「0x12345678」という16進の表記と逆向き、という意味で書いています。

(略)

>「想定読者は過去の自分自身」という視点から逃れられないものなのかもしれません。

繰り返しになりますが、「何と逆か」が明確に示していただければ、「あぁ、それと逆なのね」と、読者の一人としては納得できます。「下位から上位に読んでいったら、全然逆じゃないじゃん!何と逆? うぅーん、わからん!」と考える、ひねくれた読者もおりますので(笑)
[ この投稿を含むスレッドを表示] [ この投稿を削除]