「C言語/データ型と変数の高度な話題」の版間の差分

削除された内容 追加された内容
251 行
データ型は扱いたいデータの種類や値の範囲によって決定する。
 
【下の表を参照しつつ読むこと】データ型には voidなし、文字型、整数型、実浮動小数点型、などがある。文字型とは1バイト文字を格納するためのデータ型でcharを用いる。
型なし とは値を持たない特殊なデータ型でvoidを用いる。
 
文字型とは1バイト文字を格納するためのデータ型でcharを用いる。また、小さな整数を格納するためにも用いられる。負の数も扱う場合にはsignedを先頭に付ける。
 
整数型とは整数を格納するためのデータ型でintを用いる。整数型には扱う値の範囲に応じて様々な種類が存在する。扱う値の範囲が狭い順にshort int, long int, long long intなどがある。
262 ⟶ 259行目:
実浮動小数点型とは浮動小数点数を格納するためのデータ型で float または double を用いる。浮動小数点数とは有効数字部と指数部とによる実数の近似値の表現方式である。またfloatとdoubleとでは doubleのほうが精度が高い。
 
* 次に主なデータ型を表にまとめた。ビット長および扱える値の範囲は処理系によって異なる場合がある。以下は主な32ビット処理系の場合である。実際のビット長及び扱える値の範囲は limits.h および float.h により確認できる。
 
{|class="wikitable"
297 ⟶ 294行目:
|}
 
* 表中のデータ型にある「()」は省略可能であることを表す。<br>
※ signed int型およびunsigned int型のビット長は処理系により異なる場合が特に多い。<br>
一般に16ビット処理系ならば16ビット、32ビット処理系ならば32ビット、64ビット処理系ならば32ビットである。<br>
 
ただし、{{code|int}}、{{code|short}}、{{code|long}}を特定のサイズであるという仮定のもと用いるのは誤りの種である。暗黙に (あるいは[[Java]]のように) {{code|short}}は16ビット、{{code|int}}は32ビット、{{code|long}}は64ビットと仮定してしまうことがあるが、それは一部のプラットフォームに限られる。付け加えるならば、ポインタのアドレス幅に対して仮定することも間違っている。
<pre>
 
Column 32ビット(x86)と64ビット(x64)
以下の表はそれぞれのビット幅を示す<ref>https://www.viva64.com/en/a/0050/ Table N1</ref>。
{|class="wikitable"
! short
! int
! long
! ポインタ
! long long
! 例
|-
| -
| 16
| -
| 16
| -
| Unix (1973)
|-
| 16
| 16
| 32
| 32
| -
| Unix (1977)
|-
| 16
| 32
| 32
| 32
| 64
| Windows (x86)
|-
| 16
| 32
| 32
| 64
| 64
| Windows (x64) - LLP64
|-
| 16
| 32
| 64
| 64
| 64
| 現代のUnix
|}
 
ビット長が固定でなければならない場合、プラットフォーム可搬な固定長整数を得る場合は、{{code|<stdint.h>}}をインクルードし、以下を使用する<ref>https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html#tag_13_47</ref>。ただし、処理系によっては提供されないことがある。
{|class="wikitable"
! ビット長
! 符号あり
! 符号なし
|-
| 8
| int8_t
| uint8_t
|-
| 16
| int16_t
| uint16_t
|-
| 32
| int32_t
| uint32_t
|-
| 64
| int64_t
| uint64_t
|}
 
Column {{コラム|32ビット(x86)と64ビット(x64)|
以前のパソコンは32ビット(x86)を使うことが多かったが、
現在のパソコンは64ビット(x64)を使うことが主流となっている。
318 ⟶ 381行目:
 
タスクマネージャーで64ビットのプロセスであることが確認できる。
}}
</pre>
 
=== struct ===