2021年11月19日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 780 count

整数型: 小数点以下は扱えないぜ! だけど高速省メモリ!

Written By: 川俣 晶連絡先

この章のテーマ §

 整数型(byte/int/long/sbyte/nint/nuint/uint/ulong/short/ushort型)についての基礎を学びます。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, メソッドの基礎, (typeof演算子、ジェネリック)

※ typeof演算子、ジェネリックについてはサンプルソースで使用しているだけで、特に必須ではない。

解説 §

 C#には、整数を扱う型が多く存在します。

 しかし、整数は一種類ではないでしょうか。

 整数とは、大ざっぱに言えば【小数でも分数でもない数】であり、一種類しかあり得ません。

 ですが、整数は数が多く無限大まで上限というものがありません。

 これでは、効率良くコンピュータで扱えません。

 そこで、便宜上、様々な最大値と最小値を定義した型を用意して、これを使い分けています。

 最も幅が狭いものはsbyte型などで、sbyte型なら127~-128を扱えます。最も幅が広いものはlong型などで、long型なら9223372036854775807~-9223372036854775808を扱えます。

 一般的に表現できる範囲が狭い方がより省メモリで高速に処理できます。

 扱う値が1個だけならどれを使っても大差ありませんが、巨大な配列を確保する場合にはデータ型の選び方で性能に差が出る場合もあります。

 「このプログラムでは最大いくつまで値が使われるか」を見切って、それに必要な最小限度の表現力を持った型を選ぶのがプログラマーの腕前です。

罠の数々 §

  • 整数型には、大きく分けると符号付きと符号なしがある。符号なしはマイナスという概念がない。最小値は常に0である
  • C#の整数型には、C#の言語使用で決められたintなどの名前と、.NET側で決められた本名が存在する。どちらを使ってもプログラムは書けるが、たいていは短い方を使う。しかし、他言語との相互運用では本名を意識する
  • nintとnuintは特殊な型で、32bit環境ではint/uint型と同じ表現力、64bit環境だとlong/ulong型と同じ表現力になる。使い道が特殊なのでビギナーは「そういう型もある」とだけ理解するだけで良く、無理に使わなくてもよい。サンプルソースの実行例は64bit環境で行ったもので、32bit環境だと違う値になる
  • char型は数値と文字の双方の性質を持った特殊な型である。表現力はushort型と同じなので、特に整数のためにchar型を使う意味はない。

参考リンク §

整数数値型 (C# リファレンス)

サンプルソース: integerTypes §

sub<sbyte>("sbyte", sbyte.MaxValue, sbyte.MinValue);

sub<short>("short", short.MaxValue, short.MinValue);

sub<int>("int", int.MaxValue, int.MinValue);

sub<nint>("nint", nint.MaxValue, nint.MinValue);

sub<long>("long", long.MaxValue, long.MinValue);

sub<byte>("byte", byte.MaxValue, byte.MinValue);

sub<ushort>("ushort", ushort.MaxValue, ushort.MinValue);

sub<uint>("uint", uint.MaxValue, uint.MinValue);

sub<nuint>("nuint", nuint.MaxValue, nuint.MinValue);

sub<ulong>("ulong", ulong.MaxValue, ulong.MinValue);

static void sub<T>(string name, T max, T min) => Console.WriteLine($"名前:{name,-10} 本名:{typeof(T).FullName,-14} 最大値:{max,22} 最小値:{min,22}");

実行結果 §

名前:sbyte      本名:System.SByte   最大値:                   127 最小値:                  -128

名前:short      本名:System.Int16   最大値:                 32767 最小値:                -32768

名前:int        本名:System.Int32   最大値:            2147483647 最小値:           -2147483648

名前:nint       本名:System.IntPtr  最大値:   9223372036854775807 最小値:  -9223372036854775808

名前:long       本名:System.Int64   最大値:   9223372036854775807 最小値:  -9223372036854775808

名前:byte       本名:System.Byte    最大値:                   255 最小値:                     0

名前:ushort     本名:System.UInt16  最大値:                 65535 最小値:                     0

名前:uint       本名:System.UInt32  最大値:            4294967295 最小値:                     0

名前:nuint      本名:System.UIntPtr 最大値:  18446744073709551615 最小値:                     0

名前:ulong      本名:System.UInt64  最大値:  18446744073709551615 最小値:                     0

※ これは64bit環境での実行結果である。32bit環境ならnint/nuintの最大値/最小値が異なる。

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。なお、1と2はどちらもint型の整数である。

Console.WriteLine(1 / 2);

  1. 0
  2. 0.5
  3. 1
  4. 2
  5. 整数は小数点以下を表現できないというエラーになる

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2021年
11月
20日
実数型: 巨大数も極小数ドンと来い!
3days 0 count
total 854 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2021年
11月
18日
空文(空のステートメント) : 何もしない空の文
3days 0 count
total 837 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20211119112116
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.