配列に関するページでの説明文(http://ja.wikipedia.org/wiki/%E9%85%8D%E5%88%97# …)を閲覧しました際に、或る表現の意味が気になりました。
それは「古典的な言語では添え字は非負整数であり、…」という内容です。
そこで、唐突な表現で畏れ入りますが、御伺いを致します。
そもそも、メモリ上で連続した領域へデータが並べられている際に、その番地への直接的なアクセスの為に、添え字を添えるのだろう、と私は勝手に考えていたのですが、上記のページの説明で【非負整数】の状態が殊更に説明されている事情から類推しますと、メモリの番地に負整数の番号を割り当てても構わなくなっているのでしょうか?
No.1
- 回答日時:
> メモリ上で連続した領域へデータが並べられている際に、その番地への直接的なアクセスの為に、添え字を添える
ちがいます。
そんな直接的にアクセスするは、アセンブリくらいです。
配列をどう実現するかは、その言語/処理系しだいです。
連続に配置される必要はかならずしもありません。
添字と記憶領域が対応してればいいのですから。
特に、そのURLにある「連想配列」は添字は「整数」ですらありません。
その部分の記述は、文字列や負の値など「なんでも」添字になり得る「連想配列」を説明するために、従来の配列の性質を説明しているにすぎません。
また、メモリ上に連続に配置するとしても、添字がそのままメモリの番地になるわけでもありません。
「最初の要素のアドレス」 + (「添字」-「最初の要素の添字」) x 「1要素あたりに必要なアドレスサイズ」
(添字が0から始まる配列で、a[5] だったら 「a[0]のアドレス」 + (5 -0) x 「a[i]一つ一つに必要なアドレスサイズ」)
とするのが普通です。
たとえ、添字に負が与えられたとしても、最終的なアドレスが負になるわけではありません(普通は、その前に添字の範囲外としてエラーになりますが)
さらに、計算の結果が負になったとしても、CPUは、内部表現が同じ「正」のアドレスとして処理するので、「負のアドレス」自体が存在しません。
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|
+―+―+―+―+―+―+―+―+―+
コンピュータは高速に演算処理をおこない,最終的にはそれを実メモリ上の非負整数の番地へと変換してくれます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 "dozen"以外の数の単位が名詞を修飾する場合の"of"の必要性とその理由について 3 2023/04/29 16:03
- 知的財産権 本書の購入者に限り、個人、法人を問わず無料で使用できます 1 2022/05/11 05:27
- 英語 "not to worry"の元の表現等について 1 2023/06/22 14:44
- 政治 福島の処理水について中国や韓国がいちゃもんをつけてくる問題って…… 9 2023/07/11 17:18
- メディア・マスコミ NHKがねつ造 16 2023/05/16 22:37
- Windows 10 win11 日本語を入力するとアプリが消える 1 2022/11/22 19:34
- 政治 大阪府でギャンブル依存症対策の条例が成立……そりゃ、まぁ、良いんですけどね、パチンコはどうなんだろ 8 2022/10/27 16:02
- 英語 提示文のif節の用法について(senario if節) 6 2023/07/31 10:18
- 日本語 「彼の考えは、まるで私と同じでした。」 これは直喩や隠喩が使われている文ですか? その2 1 2023/06/18 20:56
- 人類学・考古学 ドローンを飛ばして間近で古墳調査をするのって、宮内庁の許可は必要なのかな? 5 2023/03/04 09:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
DBから取得した値を配列へ代入する
-
C#でbyte配列から画像を表示さ...
-
構造体配列の一部初期化!!!
-
エクセルでXY座標に並べられた...
-
VB6で、一次元配列と二次元配列...
-
定数配列の書き方
-
配列の中の最大値とそのインデ...
-
オブジェクト名を変数で参照で...
-
配列の要素がすべてカラかどう...
-
vba フィルター 複数条件 3つ以...
-
Dir関数で読み取り順を操作でき...
-
ActiveReports(アクティブレポ...
-
VB.NETの配列にExcelから読み込...
-
VBで配列に格納されているデー...
-
8bitインデックス画像の入出力方法
-
Redim とEraseの違いは?
-
VBでの配列をEXCELに出力する方法
-
EXCEL VBA 配列デー...
-
Excel2010のinputboxで複数デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Excel2010のinputboxで複数デー...
-
エクセルでXY座標に並べられた...
-
構造体配列の特定のメンバーをF...
-
定数配列の書き方
-
コンボボックスのインデックス...
-
OutOfMemoryExceptionの回避策...
-
Dir関数で読み取り順を操作でき...
-
CheckBoxの配列化
-
構造体配列内の文字列検索のよ...
-
COBOLの基本的な事なので...
-
Redim とEraseの違いは?
-
VBAで配列引数を値渡しできない...
-
2次元配列の初期値
-
配列の中の最大値とそのインデ...
-
大量の変数を定義するにはどう...
-
VB6からの移行したいけど、VB.N...
-
VB6のメモリ解放に関して
おすすめ情報