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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎固定幅の整数型: https://en.wikipedia.org/w/index.php?title=C_data_types&oldid=1036349659 から Fixed-width integer type 節を抄訳
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
260 行
浮動小数点型とは浮動小数点数を格納するためのデータ型で float または double を用いる。浮動小数点数とは有効数字部と指数部とによる実数の近似値の表現方式である。またfloatとdoubleとでは doubleのほうが精度が高い。
 
主なデータ型を表にまとめた。実際のビット長及び扱える値の範囲は limits.h および float.h により確認できる<ref name=c1x-inttypes>{{cite book | url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf | title=ISO/IEC 9899:201x Committee Draft — April 12, 2011 N1570 | at=p.26, § 5.2.4.2.1 ''Sizes of integer types'', p.479, § B.9 ''Sizes of integer types''}}</ref><ref name=c1x-floattypes>{{cite book | url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf | title=ISO/IEC 9899:201x Committee Draft — April 12, 2011 N1570 | at=p.28, § 5.2.4.2.2 ''Characteristics of floating types''}}</ref>
 
{|class="wikitable"
|+ C言語の主なデータ型とビット長と範囲の一例<ref>環境は、FreeBSD 13.0/amd64 + clang version 11.0.1</ref>
! データ型の種類 !! データ型 !! データ型の名称 !! ビット長 !! 扱える値の範囲<ref>浮動小数点型にあっては正規化数</ref>
|-
269 行
| void || void型 || - || -
|-
! rowspan="23"| 文字型
| signed char<ref name="char-sign">符号有無は処理系定義</ref> || 符号付き文字型 || 8(CHAR_BIT) || -128(CHAR_MIN) ~ 127(CHAR_MAX)<ref name="char-sign"/>
|-
<!--||-->|unsignedsigned char<ref name="char-sign"/>||(符号無し)付き文字型||8(CHAR_BIT)||0~255 -128(SCHAR_MIN) ~ 127(SCHAR_MAX)
|-
<!--||-->|unsigned char<ref name="char-sign"/>||符号無し文字型||8(CHAR_BIT)||0(UCHAR_MIN)~255(UCHAR_MAX)
|-
! rowspan="8"| 整数型
| ([signed)] short int || ([符号付き)]短整数型 || 16 || -32768(SHRT_MIN) ~ 32767(SHRT_MAX)
|-
<!--||-->|unsigned short int || 符号無し短整数型 || 16 || 0(USHRT_MIN) ~ 65535(USHRT_MAX)
|-
<!--||-->|([signed)] int || ([符号付き)]整数型 || 32 || -2147483648L~2147483647L2147483648(INT_MIN)~2147483647(INT_MAX)
|-
<!--||-->|unsigned int || 符号無し整数型 || 32 || 0UL~4294967295UL0U(UINT_MIN)~4294967295U(UINT_MAX)
|-
<!--||-->|([signed)] long int || ([符号付き)]長整数型 || 32 || -2147483648L~2147483647L2147483648L(LONG_MIN)~2147483647L(LONG_MAX)
|-
<!--||-->|unsigned long int || 符号無し長整数型 || 32 || 0UL~4294967295UL0UL(ULONG_MIN)~4294967295UL(ULONG_MAX)
|-
<!--||-->|([signed)] long long int || ([符号付き)]長長整数型 || 64 || -9223372036854775808LL(LLONG_MIN)<br> ~ 9223372036854775807LL(LLONG_MAX)
|-
<!--||--> |unsigned long long int || 符号無し長長整数型 || 64 || 0UL(ULLONG_MIN) ~ 18446744073709551615ULL(ULLONG_MAX)
|-
!rowspan="3" | 浮動小数点型
| float || 単精度浮動小数点型 || 32 ||
最小の正の数1.175494351E-38F(FLT_MIN)<br>
最大値3.402823466E+38F(FLT_MAX)
|-
<!--||-->|double || 倍精度浮動小数点型 || 64 || 最小の正の数 2.2250738585072014E-308(DBL_MIN)<br>最大値 1.7976931348623158E+308(DBL_MAX)
|-
<!--||-->|long double || 四倍精度浮動小数点型 || 64128 || 最小の正の数 3.3621031431120935063E-4932L(LDBL_MIN) <br>最大値 1.1897314953572317650E+4932L(LDBL_MAX)
|-
|}
* 表中のデータ型にある「()[]」は省略可能であることを表す。「()」内は、limits.h(または float.h)で定義されるマクロ名
 
* 表中のデータ型にある「()」は省略可能であることを表す。
 
ただし、{{code|int}}、{{code|short}}、{{code|long}}を特定のサイズであるという仮定のもと用いるのは誤りの種である。暗黙に (あるいは[[Java]]のように) {{code|short}}は16ビット、{{code|int}}は32ビット、{{code|long}}は64ビットと仮定してしまうことがあるが、それは一部のプラットフォームに限られる。付け加えるならば、ポインタのアドレス幅に対して仮定することも間違っている。
358 ⟶ 359行目:
|}
 
ビット長が固定でなければならない場合、プラットフォーム可搬な固定長整数を得る場合は、{{code|<stdint.h>}}をインクルードし以下を使用する。{{code|<stdint.h>}}はC99で導入された<ref name=c99>https{{cite book | url=http://pubswww.opengroupopen-std.org/onlinepubsjtc1/9699919799sc22/basedefswg14/www/docs/n1256.pdf | title=ISO/IEC 9899:1999 specification, TC3 N1256| at=p. 255, § 7.18 ''Integer types <stdint.h.html#tag_13_47>''}}</ref>。ただし、処理系によっては提供されないことがある
{{Main|C言語/データ型と変数の高度な話題#固定幅の整数型}}
{|class="wikitable"
! ビット長