電子書籍の厳選無料作品が豊富!

https://oshiete.goo.ne.jp/qa/8940272.html
 以上のアドレス先のプログラムのコメントに
 ※「gyou[1024];=1 行のバイト数がそれ以下であれば問題ない」
 と書き込んでしまいました。
  すると!プログラムは、行数を計算するプログラムですが、
そのプログラムの行数は22行ありますが、その中の一番多い行の文字数は半角40文字あります。
 40文字×1バイト=5120ビットになります。
  なので 
上記の※は最大1024ビットですので、対応できない計算になると思います。
 しかし、プログラムはちゃんと動いていますので!私のどこが間違っている
か知りたいです。
 よろしくお願いいたします。

質問者からの補足コメント

  • 分かりやすいご回答ありがとうございました。
     K&Rの本 以下の本であれば、以前アマゾン.comで中古本をかなり安くご購入いたしました。
     間違いございませんでしょうか!? 本の内用は最初からかなりハイレベルですが!たまに読んでいます。
    http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82 …

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/03/14 17:07

A 回答 (4件)

えーと、そもそもバイトとビットの理解自体が曖昧みたいですが・・・σ(^_^;)



「1バイト = 8ビット」と言うのは固定のお約束です
んで、8ビットというのは2進数で数値を表すってことです
つまり8桁の2進数 00000000 〜 11111111
の256パターンで0から255の値を表現できます
これは C言語ファミリーでは unsigned char と宣言したときで
char と宣言すると符号付きとなり1ビットを符号状態に使うため
7桁の2進数 0000000 〜 1111111
の128パターン x 符号状態 でー127から+128まで表現できるわけです
ちなみになんでー127って+より1少ないかといえば0があるから
ここは理解できてますか?

で肝心の配列ですが・・・
 gyou char[1024];
これの意味は
「符号付き1バイトが1024個並んだ領域を確保し、先頭をgyouと言う名前で参照します」
ので gyou[0] だろうが gyou[100] だろうが1バイトなのです
添字は0から始まるのでこの場合のMAXは1023ですな

0 1 2 3・・・・・・・・・・1023
↓↓↓↓・・・・・・・・・・↓
□□□□・・・・・□□□□□□

gyou

)最後に個人的な思い込みの助言
どのような参考書をお使いか知りませんが
C言語を勉強するなら1度はK&Rの本を読んどくべきかと
全ての原点はそこにあります
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答いろいろ誠にありがとうございました。
以下は理解できます。
「1バイト = 8ビット」と言うのは固定のお約束です
んで、8ビットというのは2進数で数値を表すってことです
つまり8桁の2進数 00000000 〜 11111111
の256パターンで0から255の値を表現できます
これは C言語ファミリーでは unsigned char と宣言したときで
  と

ちなみになんでー127って+より1少ないかといえば0があるから
ここは理解できてますか?
 他 まだ理解できていませんが、何回か読みたいと思います。

お礼日時:2015/03/15 15:46

もし本当に


「半角1文字は=1バイト=0~127ビット」
なんて書いてあるような参考書なら捨ててしまった方がいいです. 本当にそんな風に書いてあるとは思えないけどね.

以下蛇足気味につっこむ.

1バイト = 8ビット
は C では通用しないです>#2. あと, ふつうは -127~128 じゃなくって -128~127 だね.

ただし規格で保証するのは (#3 でもいわれているように符号の有無が処理系に依存するため) 0 から 127 までだし, signed char でも保証されるのは -127~127 だ.
    • good
    • 0

少々補足です。



Cの規格では、
char
unsigned char (符号無しを明示)
signed char (符合付きを明示)
は、とりあえず、「別々の型」として取り扱われます。

そういうわけで、char が、符合付きとして扱われるか、符号無しとして扱われるかは、「処理系定義」となっていて、そのコンパイラ(と、場合によっては、コンパイルオプション)しだいということになります。
    • good
    • 0

参考書の配列のところを10回くらい読んでください。


どこかに []の中の数字が「ビット数」だと書いてありましたか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
 ご指摘いただいた、そんな視点で読みました。
 気づくと簡単なことですが、なかなか気づかない場合も多々ございまして_ _
 
  参考書には1文字単位で書かれていますので
 「半角1文字は=1バイト=0~127ビット」
 なので
[1024]×0~127ビット=※0~130048ビットか0~131072ビットなのか?
細かな数字はあてにはなりませんが! だいたいはあたってるとは存じます。
なので、
 40文字×1バイト=5120ビットは誤り
正解40文字×1バイト=40バイトで[1024]-40=984文字の余裕はあります。
 間違っていましたらすみません。

お礼日時:2015/03/10 23:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!