- ベストアンサー
char str[256]の256の意味は?
よく入門者などにchar str[256]という記述があります。 この256という数字には何か特別な意味があるのですか? 勿論2の8乗から来ているのでしょうが。 charって1バイト=8ビット=256ですよね。 str[256]というのを良く見かけるので、最初strは最大256個しか確保できないと思っていました。 でも、実際は1000でも良いのですよね。 ということで、どうして256という数字を使うのですか? 意味ありげな数字を使われると、初心者は混乱するので100とか200とかの方が良いと思うのですが。 特別な理由があるのでしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと一言。 1バイト(8ビット)で表現できるのは、 符号なしの場合 0(00000000)~255(11111111) 符号ありの場合 -128(10000000)~127(01111111) です。 256は表せません。 ついでにもう一言。 char str[256]; って「ファイルの名前」とか「ファイル中の1行」を 格納するために定義されることが多いでしょう。 私の場合は、 「名前(or 1行の文字数)が256文字もあるファイルは滅多に無いだろう」 「でも128文字ぐらいならあるかも。ちょっと不安」 「かといって512文字は多すぎるかな」 ってことで256にしてます。 はじめから文字数がわかってるときは32とか64にしたりもしますが。 (なんで2のべき乗なのかはNo.1の通りです。)
その他の回答 (7)
- JF1Msf
- ベストアンサー率20% (18/88)
メモリ空間にstrの場所が確保される際、計算機によって異なると思いますが、例えば32bitおきに32bitからなる"箱"が用意されます。ここでchar型を8bitと仮定するとstr[256]には、32bitの箱が64個、用意されます。 ところがstr[250]などと書いた場合、箱は63個用意されますが、最後の1箱に関し、16bitだけ余ってしまい、メモリ資源の無駄使いのような感じになってしまいます。まぁ、今の時代、メモリは安いのであまり問題にならないと思いますが、この無駄を防ぐために2のべき乗を僕は使うことがしばしばです。 でも確かに256なんて半端な数です。しかし16進数で書けばchar str[0x100]です。なんとも美しいと思いませんか?
お礼
回答ありがとうございます。 理屈があって納得です。
- tatsu99
- ベストアンサー率52% (391/751)
#2です。 >そのデータが表現出来る最大値をしきい値とすることがあります。 >1バイトの場合:256の種類のデータを表現(最大値:256) >4ビットの場合:16種類のデータを表現(最大値:16) >これが良く分かりません。 >1バイトとか4ビットはメモリの容量のことですか? >それとも型のサイズのことですか? そのデータを使用して、ある内容(例えば社員コード等)を表現する場合のそのデータの型のサイズのことです。 例えば、ある会社で社員コードを管理する時に、最大何名までを管理するかという場合、社員が100名以下の場合は、1バイトで社員コードを管理することが出来ます。(0~255の社員コードになるので、最大値を255にします。もし、最大値を999にする場合は2バイトで社員コードを管理する必要があります) 社員コードを1バイトにするか2バイトにするか、又は4バイトにするかは、メモリが非常に少ないシステムでは、大変重要な意味を持ちます。ここで、1バイトで社員コードを管理するとすると、最大256までが表現可能となります。(但し、普通は4バイトで管理するケースが一般的ですが・・) ビットで管理する場合は、以下の様なケースです。例えば、ある複数の情報をint型(32ビット)で、表す場合、 先頭の4ビットを情報Aに割り当て、次の3ビットを情報Bに割り当てるような場合です。 この場合、情報Aは最大16通りのケースが表現でき、情報Bは最大7通りの表現ができます。1つの整数を幾つかのビット情報の集まりとして管理する手法は、OSのカーネール情報の管理などの場合によく採用されています。
お礼
回答ありがとうございます。 どうも話がうまく通じていないと思ったら、最初の私の質問が十分ではなかったようです。すみません。 char str[256]を文字列を格納するために宣言した場合に、どうして文字を最大255文字とするのか? ということがお聞きしたかったのです。 たぶん#7さんの回答がその理由なのでしょうね。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>ちなみに、ヌル文字含まずなので注意が必要。 失礼しました。 ヌル文字は含みます。
お礼
了解しました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>こだわりたくは無いのですが、どうしてMAX_FNAMEって256なのでしょうか? FATやFAT32の制限。 ちなみに、ヌル文字含まずなので注意が必要。 ドライブ名(C:\等)とヌル文字を含んでの最大値は_MAX_PATH = 260になるので、領域を確保するサイズは 通常はこちらや、MAX_PATHという定数を使う。
お礼
回答ありがとうございます。 そういう制限があるのですね。
- tsukasa-12r
- ベストアンサー率65% (358/549)
ファイル入出力のバッファとして使用する場合、256 や 512、1024 と言った大きさにしておくと、処理効率がよくなるといったことを聞いたことがあるような気がします。といっても、それは MS-DOS の時代の話なので、今の時代の PC 環境では、char str[256]; にしようが char str[1000]; にしようが、体感的には何も変わらないと思います。 あと、これも今の時代では、ほとんどどうでもいいレベルの話ですが、char str[300] とするより、char str[256]; としておくと、str[ i ] のように使用する i を int でなく char で宣言できる ( メモリ使用量を 1 byte 少なくすることができる。 )とか。 あるいは、Windows 95 以降の場合、char str[_MAX_FNAME]; と書く代わりに、初心者にわかりやすかろうと思って char str[256]; と書いているとか。 とりあえず思い当たるのはそんなところですが、結論としては、あまり深い意味はないと考えてよろしいかと。
お礼
回答ありがとうございます。 こだわりたくは無いのですが、どうしてMAX_FNAMEって256なのでしょうか? 長すぎず短すぎずといったとこなのでしょうか?
- tatsu99
- ベストアンサー率52% (391/751)
ご想像のとおり、2の8乗からきています。 コンピュータは内部は2進数のため、 2,4,8,16,32,64,128,256,512,・・ といった数値がきりの良い数値となります。 人間の場合は10のn乗がきりの良い数値の為 1,100,1000,1000,・・となります。 従って、256ようなの数値を採用するケースが多くなります。 従って、何かのしきい値を設けるとき、100にするか256にするかは、個人の好みの問題になります。どちらを採用するかを顧客に提案する場合は、一般的には、コンピュータ業界の人間は、2のn乗の値をきりの良い値と考えますので、256の値を採用した方が、すんなり受け入れられるケースが多いでしょう。(100のほう受け入れられるケースもあります。) 但し、マイコンのように、少ないメモリでシステムを作る場合(又は昔の時代のようにメモリが高価な時)は、そのデータが表現出来る最大値をしきい値とすることがあります。 1バイトの場合:256の種類のデータを表現(最大値:256) 4ビットの場合:16種類のデータを表現(最大値:16) のようにします。
お礼
回答ありがとうございます。 >そのデータが表現出来る最大値をしきい値とすることがあります。 >1バイトの場合:256の種類のデータを表現(最大値:256) >4ビットの場合:16種類のデータを表現(最大値:16) これが良く分かりません。 1バイトとか4ビットはメモリの容量のことですか? それとも型のサイズのことですか? もし後者だとすると、 1バイトの配列を16こ 4ビットの配列を256こ しても良いわけで、そのデータが表現できる最大値をしきい値とする意味合いが理解できないのですが。
- HOGERA3
- ベストアンサー率35% (50/139)
確かにmk1234さんのおっしゃる通り何でもいいんですけど、 プログラミングをやってる人は2のべき乗の方が100とか200より 切りのいい数字に感じるからでしょう。 その中でも256は『ニゴロ』と読めますから 音もいいですし。
お礼
回答ありがとうございます。 プログラミングをやっている人から見ると、256の方が自然な訳ですね。 でも、初心者からみるとちょっと混乱しますよね。 128ならまだ良いのですが、char型と256という組み合わせが意味ありげなんで。
お礼
回答ありがとうございます。 多分こんなところですよね。 これなら納得です。