0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C言語の基本的なデータ型と入力範囲

Last updated at Posted at 2021-05-29

コメントでご指摘を頂いたので、追記して修正しました。
どうもありがとうございます!


  • データ型と入力範囲を調べてまとめました。
  • 全ての型が書いてあるわけではありません。

そもそもデータ型とは

  • 格納されているデータの種類を規定するルールです。
  • 言語毎に定められているものの、整数や小数など共通するものも多いです。
  • データ型ごとに扱えるデータの種類や範囲は異なります。

実体はメモリ領域の確保の仕方です。
コメントでご指摘頂きましたが、データ型の実体は、言語レベルでどう解釈するか、ということです。
充てられる容量に限りがあるため、範囲に制限があります。
(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ビット分になる。

符号付の整数型の最上位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

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?