- - PR -
配列の添字が0から始まるメリットは?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-03-07 18:26
そもそもどの言語を使っているときの疑問なのでしょうか。
らぶまさんの書き込みの通り、Cではa[n]は*(a+n)のシンタックスシュガーに過ぎないから ですし、C++やJavaはCの言語仕様を引き継いでいるからですね。 一方Fortranのように1オリジンの言語もありますし、VBだとオリジンをどこからにするのかを 指定できますよね(VB.netは知りませんが)。 なので、さして意味があるわけではなく、歴史的経緯にすぎない、と思います。 | ||||||||
|
投稿日時: 2005-03-07 21:06
次のように考える、となにかの本で見た覚えがあります。
(カーニハンだったか、ワインバーグだったか) 0から始まる場合: a[0] .. 配列の先頭からの距離が0 a[1] .. 配列の先頭からの距離が1 1から始まる場合: a[1] .. 配列の1番目の要素 a[2] .. 配列の2番目の要素 また、この話題で思い出したのですが、 Microsoft系BASICだと、添え字の開始番号を0か1に切り替える命令があったと思います。 (OPTION BASE、だったかな) また、Pascalだと添え字の範囲を指定できるので、a[-5] ってのも可能だったはず。 あと、perlだと$a[-1]は配列の最後の要素、$a[-2]は最後から2番目、だったかも。 | ||||||||
|
投稿日時: 2005-03-07 21:13
unibon です。こんにちわ。
#私は0派です。1から数え始めるなんて考えられない。
「なんで1からなんだよ!」と怒鳴ったことはあります。 VB の Collection とかは1から数え始めますよね。これに良く泣かされました。 #1から数え始める流儀は、呼称としては「1オリジン」とか他にもいくつか言い方はあったかもしれません。
私も問いたい。 もしかして配列が1から始まるのは何か意味深いモノがあるのでは無いか? そこで質問です。「配列が1から始まるメリットは何ですか?」 子供の頃、病院かなにかの待合室で、待ち番号を知らせる電光掲示板があって、 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ... という並びでした。右端の十の桁だけが他と違うことに違和感がありました。 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... のほうがキレイなのに、と思った。 #あとで誤字修正。 [ メッセージ編集済み 編集者: unibon 編集日時 2005-03-07 21:15 ] | ||||||||
|
投稿日時: 2005-03-07 23:32
アセンブラ(機械語)をやってみるとわかりますが、内部的には配列が0から始まったほうが都合がいいのです。
高級言語が1から始まっても動作するのは、コンパイラが機械語を出力する際、1を引くロジックを出力しているからです。 この1を引くロジックは、コンパイラやアーキテクチャごとに違うのではっきりとはいえませんが、1命令(2〜6バイト)くらいかと思います。 つまり、配列を1から始めた場合、記述1箇所につき余分な命令が1回実行され、実行形式が2〜6バイト大きくなります。 業務アプリの場合はたいして問題ありませんが、組込系のような速度・メモリがシビアな場合には問題になります。 厳密にいうともっと複雑ですが(添字が定数の場合は増えない等)、あまり詳しくないのでやめときます。 | ||||||||
|
投稿日時: 2005-03-07 23:39
0/1のどっちと言われればJavaで慣れているので0ですが、
高級言語を使う以上、言語仕様が0であれば0でいいし、 1であれば1でも全然構いません。 一番困るのは、同じ言語でもAPIによって要素へのアクセスが 0で始まるものや1で始まるものと、バラバラだったりしますよね。 JavaでもSQL関係のパッケージはカラムへのアクセスが1から始まります。 気づかずコンパイルして、1度目は必ずコンパイルエラーです。。。 コンパイラはエラーを吐かないですからね。 | ||||||||
|
投稿日時: 2005-03-08 08:42
るぱんです。
VB6.0では 『Option Base 0』 『Option Base 1』 と言う添え字の開始をずらせた覚えがあります。 この辺に起因するバグもたくさん見てきましたが・・・。汗 ・・・と言うか、何を持って高級言語なのでしょうか? 定義がすくな-い気がします。 | ||||||||
|
投稿日時: 2005-03-08 09:15
パテ太です。 パッと見『強そうなのが高級言語』です。・・・と思います。 | ||||||||
|
投稿日時: 2005-03-08 09:23
http://www.atmarkit.co.jp/icd/root/67/14075567.html
これを読む限り、アセンブリ言語以外は 高級言語という定義になっていますね。 |