• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「添え字」に関しましての初歩的な質問です。)

添え字に関する初歩的な質問

このQ&Aのポイント
  • メモリ上でデータに直接アクセスするための添え字の意味について質問があります。
  • 配列に関するページでの説明文を閲覧し、非負整数という言葉に疑問を感じました。
  • メモリの番地に負整数の番号を割り当てることは可能なのでしょうか?

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>メモリ上で連続した領域へデータが並べられている際に、 >その番地への直接的なアクセスの為に、 というのが古典的な発想だということです。 近年のコンピュータは十分に高速ですから, 実際のメモリにはどんな風にデータが並んでいるかなどというハードウェア側の事情はいっさい忖度せず,人間側の事情だけを考えて好きなように扱いやすいように自由にデータ構造を設計することができます。 古典的なプログラム言語では,下記のような添字しか認めていなかったとしても,  0 1 2 3 4 5 6 7 8 +―+―+―+―+―+―+―+―+―+ |Y|a|G|h|o|o|g|L|e| +―+―+―+―+―+―+―+―+―+ 配列の末尾と先頭が連結してリングを構成しているイメージで, 「配列の先頭から11文字進んだ位置から4文字を取り出したい」とか 「配列の先頭から7文字さかのぼった位置から4文字を取り出したい」などのニーズが人間側にあるのなら, そういう添字を認めるような進歩的なプログラム言語を考えればよいということです。  9 10 11 12 13 14 15 16 17 +―+―+―+―+―+―+―+―+―+ |Y|a|G|h|o|o|g|L|e| +―+―+―+―+―+―+―+―+―+ 0 -8 -7 -6 -5 -4 -3 -2 -1 +―+―+―+―+―+―+―+―+―+ |Y|a|G|h|o|o|g|L|e| +―+―+―+―+―+―+―+―+―+ コンピュータは高速に演算処理をおこない,最終的にはそれを実メモリ上の非負整数の番地へと変換してくれます。

YaGhoogle
質問者

補足

有り難う御座います。 良く分かりました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> メモリ上で連続した領域へデータが並べられている際に、その番地への直接的なアクセスの為に、添え字を添える ちがいます。 そんな直接的にアクセスするは、アセンブリくらいです。 配列をどう実現するかは、その言語/処理系しだいです。 連続に配置される必要はかならずしもありません。 添字と記憶領域が対応してればいいのですから。 特に、そのURLにある「連想配列」は添字は「整数」ですらありません。 その部分の記述は、文字列や負の値など「なんでも」添字になり得る「連想配列」を説明するために、従来の配列の性質を説明しているにすぎません。 また、メモリ上に連続に配置するとしても、添字がそのままメモリの番地になるわけでもありません。 「最初の要素のアドレス」 + (「添字」-「最初の要素の添字」) x 「1要素あたりに必要なアドレスサイズ」 (添字が0から始まる配列で、a[5] だったら 「a[0]のアドレス」 + (5 -0) x 「a[i]一つ一つに必要なアドレスサイズ」) とするのが普通です。 たとえ、添字に負が与えられたとしても、最終的なアドレスが負になるわけではありません(普通は、その前に添字の範囲外としてエラーになりますが) さらに、計算の結果が負になったとしても、CPUは、内部表現が同じ「正」のアドレスとして処理するので、「負のアドレス」自体が存在しません。

YaGhoogle
質問者

補足

有り難う御座います。 良く分かりました。

関連するQ&A