雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
  • ソース を表示
  • 型キャスト は削除されています。
2: 2007-02-11 (日) 19:14:00 ソース バックアップ No.2 を復元して編集 3: 2007-03-08 (木) 14:35:25 ソース バックアップ No.3 を復元して編集
Line 1: Line 1:
 +COLOR(red){えーっと!専門家に見てもらったら案の定このページの内容は大間違いだということがわかりましたー!(泣  そんなわけで再びお勉強&修正開始〜!}
 +
 +----
 +
 +
 +
 +
C言語の変数っていろいろ型がある。で、それらを相互に変換することを''型キャスト''あるいは単純にキャストと言う。 C言語の変数っていろいろ型がある。で、それらを相互に変換することを''型キャスト''あるいは単純にキャストと言う。
Line 16: Line 23:
C言語では大体こんな感じ。 C言語では大体こんな感じ。
-|int型|整数|4バイト|どうも通常は動作している環境って単位みたい。|+|int型|整数|4バイト|どうも通常は動作している環境って単位みたい。つまり16bitCPUなら16bit、32bitCPUなら32bitとか(Cコンパイラに依存?)|
|float型|小数|4バイト|文字通り少数を扱いたい場合使うらしい| |float型|小数|4バイト|文字通り少数を扱いたい場合使うらしい|
|char型| 文字(一文字単位)|1バイト|「A」だの「i」だの| |char型| 文字(一文字単位)|1バイト|「A」だの「i」だの|
Line 39: Line 46:
枝豆ってなぁ・・・大豆やねんでぇ? 枝豆ってなぁ・・・大豆やねんでぇ?
--たとえばchar型。1バイトである。二進数でいえば8桁。扱える範囲は 00000000〜11111111までだ。これを16進数に直すと0x00〜0xFF。10進数だと0〜256までの値を使えるということになる。+-たとえばchar型。1バイトである。二進数でいえば8桁。扱える範囲は 00000000〜11111111までだ。これを16進数に直すと0x00〜0xFF。10進数だと0〜255までの値を使えるということになる。
ヨミちゃんアカンわ・・・・ ヨミちゃんアカンわ・・・・
--しかしこれは間違い。C言語の通常の考え方では、頭の(一番左)のビットは''符号用の印''として扱うようだ。頭の1ビットが0なら正数。1なら負の数ということ。っていうことは、char型が数字の値として扱えるのは残りの7ビットだけということになるわけ。7ビット(0000000〜1111111)だと、0〜128まで。で、符号があるから、char型が扱える数値の範囲は -128〜128 ということになる。ポインタを除く普通の変数はみなこの法則になる。+-しかしこれは間違い。C言語の通常の考え方では、頭の(一番左)のビットは''符号用の印''として扱うようだ。頭の1ビットが0なら正数。1なら負の数ということ。っていうことは、char型が数字の値として扱えるのは残りの7ビットだけということになるわけ。7ビット(0000000〜1111111)だと、0〜127まで。で、符号があるから、char型が扱える数値の範囲は -127〜127 ということになる。ポインタを除く普通の変数はみなこの法則になる。
それは豆知識やのーて豆の知識や〜て言わなアカンやろ それは豆知識やのーて豆の知識や〜て言わなアカンやろ
--しかしそれだと不便だという場合もあるよね?。50+40+80なんて計算をしたい場合、char型では正の数は最大で128。たかが170なんて値を計算したのにint型(4バイト)を使わなくてはいけなくなる。これじゃメモリの無駄だよね。なので、''unsigned''というオプションがある。ただの char a; だと、変数aは-128〜128という範囲になるけど、unsigned char a; って宣言すると、最初の1ビットを符号とするのをやめてくれる。なので変数aは、 0〜256 を扱える変数になるわけ。+-しかしそれだと不便だという場合もあるよね?。50+40+80なんて計算をしたい場合、char型では正の数は最大で128。たかが170なんて値を計算したのにint型(4バイト)を使わなくてはいけなくなる。これじゃメモリの無駄だよね。なので、''unsigned''というオプションがある。ただの char a; だと、変数aは-127〜127という範囲になるけど、unsigned char a; って宣言すると、最初の1ビットを符号とするのをやめてくれる。なので変数aは、 0〜255 を扱える変数になるわけ。 
 + 
 + 
 +COLOR(BLUE){多くのコンピュータの変数等は「0」という値をもっている。なので大抵''0〜xxx''という感じになる。16進数で0x00〜0xFFは、10進数で0〜255となる。最大の値は255だが、0も1個と数えられるので、個数・種類という目でみると1個増える。} 
 +-COLOR(BLUE){''例:'' 1バイトは0〜255までの数字を扱える。なので、''256種類''の色を表現できる} 
 + 
 + 
*違う型同士の演算 [#db169d62] *違う型同士の演算 [#db169d62]
Line 128: Line 142:
-*ポインタ型のキャスト [#aa70e23e]+**ポインタ型のキャスト [#aa70e23e]
これがややこしいですね。整理して単純化して考えてみます。 これがややこしいですね。整理して単純化して考えてみます。