コメントでご指摘を頂いたので、追記して修正しました。
どうもありがとうございます!
- データ型と入力範囲を調べてまとめました。
- 全ての型が書いてあるわけではありません。
そもそもデータ型とは
- 格納されているデータの種類を規定するルールです。
- 言語毎に定められているものの、整数や小数など共通するものも多いです。
- データ型ごとに扱えるデータの種類や範囲は異なります。
実体はメモリ領域の確保の仕方です。
コメントでご指摘頂きましたが、データ型の実体は、言語レベルでどう解釈するか、ということです。
充てられる容量に限りがあるため、範囲に制限があります。
(8脚の椅子に座れるのは8人まで)
C言語におけるデータ型
整数
型名 | 格納出来るデータ | 範囲 |
---|---|---|
int | 4バイト(または2バイト)の整数 | -2,147,483,648 ~ 2,147,483,647 (-2の31乗 ~ 2の31乗-1) |
short | 2バイトの整数 | -32,768 ~ 32,767 (-2の15乗 ~ 2の15乗-1) |
long | 8バイト(または4バイト)の整数 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (-2の63乗 ~ 2の63乗-1) |
char | 1バイトの整数 | -128 ~ 127 または 0 ~ 255 (-2の7乗 ~ 2の7乗-1) |
- intは概ね4バイト。longは概ね8バイトです。
- 符号付整数が格納されています。正負(符号)の情報を持っている整数のことです。(1や100、-1や-100)
- 各型ともに: 1ビットの符号部 + 7・17・31・63ビットの
仮数部絶対値または1の補数表現による負数の絶対値もしくは2の補数表現による負数の絶対値 - 符号部と仮数部を合わせて"データ"となります。この場合は整数です。
-
なぜ負数の方が値が1多いかというと、正数には0が含まれているため。
C言語には負数の表現の仕方が3種類あり、この場合はそのうちの「2の補数」によるものにしか当てはまりません。- char:0~127、-1~-128 または 0~255……共に128の値、合計して256。これは8桁の2進数(=2の8乗)、即ち1バイト(=8ビット))で表現出来る値と一致します。
char
型が符号付である保証はありません。コンパイラによっては符号なし整数型(0~255)ともなります。 - 7乗、15乗、31乗と、8の倍数から-1しているのは、符号付き正数型の場合、最上位1ビットは符号を表現するため、絶対値または補数表現による負数の絶対値の部分は8の倍数-1ビット分になる。
- char:0~127、-1~-128 または 0~255……共に128の値、合計して256。これは8桁の2進数(=2の8乗)、即ち1バイト(=8ビット))で表現出来る値と一致します。
符号付の整数型の最上位1ビットに続く部分のことを仮数部とは呼びません。
仮数部とは一般に浮動小数点を構成する要素です。
小数
型名 | 格納出来るデータ | 範囲 |
---|---|---|
float | 4バイトの小数 | 1.175494e-38 ~ 3.402823e+38 (7桁くらいの小数まで) |
double | 8バイトの小数 | 2.225074e-308 ~ 1.797693e+308 (16桁くらいの小数まで) |
- floatは「単精度浮動小数点」、doubleは「倍精度浮動小数点」
- 基本的にdoubleを使用する。
- 正数と同様に1ビットの符号部と仮数部、更に指数部を持っています。
- float: 1ビットの符号部 + 8ビットの指数部 + 23ビットの仮数部
- double : 1ビットの符号部 + 11ビットの指数部 + 52ビットの仮数部
- 範囲に関しては大体はいける感じだと思います。
これは個人的に躓いた点ですが、
「23ビット分の仮数部で、先頭の1が省略されているのなら、実質24ビット」
「じゃあ、2の24乗が 16,777,216 なのだから、8桁扱えるのでは?」
と、思ったのですが、10桁の2進数で2,000が表現出来ないように、
24桁の2進数にも16,777,217以降の表現が出来ません。
故に、20,000,000も表現出来ないので、7桁までしか表現出来ません。
真偽
型名 | 格納出来るデータ | 範囲 |
---|---|---|
bool | 論理値 | true false |
文字
型名 | 格納出来るデータ | 範囲 |
---|---|---|
char | 半角英数字1文字 | ABC...Z abc...z 1文字 |
- char型は-128~127または0~255の整数、半角英数1文字を格納出来ます。
おわりに
浮動小数点、中でも有効桁数の部分でかなり躓いてしまったので、記しておきました。
冷静に考えたら「そりゃそうだ」なんですけど……恥ずかしいですね。あはは。
参考にしたページ
いつもありがとうございます。
データ型の範囲 | Microsoft Docs
https://docs.microsoft.com/ja-jp/cpp/cpp/data-type-ranges?view=msvc-160
Kajiura Lab. - データ型
http://www.kusa.ac.jp/~kajiura/c/data/newpage1.htm
ITの119番(ict119.com) - float型についてわかったことをまとめる
https://ict119.com/float/
Wikipedia - 符号付数値表現
https://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E4%BB%98%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE
Wikipedia - 半精度浮動小数点数
https://ja.wikipedia.org/wiki/%E5%8D%8A%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0