2: 2007-02-11 (日) 19:14:00 |
3: 2007-03-08 (木) 14:35:25 |
| + | COLOR(red){えーっと!専門家に見てもらったら案の定このページの内容は大間違いだということがわかりましたー!(泣 そんなわけで再びお勉強&修正開始〜!} |
| + | |
| + | ---- |
| + | |
| + | |
| + | |
| + | |
| C言語の変数っていろいろ型がある。で、それらを相互に変換することを''型キャスト''あるいは単純にキャストと言う。 | | C言語の変数っていろいろ型がある。で、それらを相互に変換することを''型キャスト''あるいは単純にキャストと言う。 |
| | | |
| C言語では大体こんな感じ。 | | C言語では大体こんな感じ。 |
| | | |
- | |int型|整数|4バイト|どうも通常は動作している環境って単位みたい。| | + | |int型|整数|4バイト|どうも通常は動作している環境って単位みたい。つまり16bitCPUなら16bit、32bitCPUなら32bitとか(Cコンパイラに依存?)| |
| |float型|小数|4バイト|文字通り少数を扱いたい場合使うらしい| | | |float型|小数|4バイト|文字通り少数を扱いたい場合使うらしい| |
| |char型| 文字(一文字単位)|1バイト|「A」だの「i」だの| | | |char型| 文字(一文字単位)|1バイト|「A」だの「i」だの| |
| 枝豆ってなぁ・・・大豆やねんでぇ? | | 枝豆ってなぁ・・・大豆やねんでぇ? |
| | | |
- | -たとえば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] |
| | | |
| | | |
- | *ポインタ型のキャスト [#aa70e23e] | + | **ポインタ型のキャスト [#aa70e23e] |
| これがややこしいですね。整理して単純化して考えてみます。 | | これがややこしいですね。整理して単純化して考えてみます。 |
| | | |