スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
目次
リテラルとは
リテラル(literal)とは、英語では「文字通りの」といった意味を持ちます。
プログラムにおいて、「リテラル」とは、「変数」の対となる言葉です。
例えば、変数を宣言した時に、int型であれば、10などの数値が入り、string型であれば、”Hello”などの文字列が入るでしょう。
10やHello”に対してリテラルという言葉を使用します。
このように、変数と違い、見た通り(文字通り)解釈できる数値や文字列のことを「リテラル」と呼びます。
C#においてリテラルは、以下のようなリテラルがあります。
整数リテラル
数値型で取り扱う数値。
(例)20
浮動小数点リテラル
小数点を含んだ数値。サフィックスを指定しない場合、double型として解釈されます。
(例)1.23、1.7e3
※数値リテラルは、整数リテラルと浮動小数点リテラルの2つの意味を含んだ言葉になります。
文字リテラル
char型で取り扱う文字。シングルクォーテーション(‘)で囲む。
(例)’H’、’う’
文字列リテラル
string型で取り扱う文字。ダブルクォーテーション(“)で囲む。
(例)”こんにちは” 、”このサイトのドメインはict119.com”
論理値リテラル
bool型で取り扱う真偽値。
(例)true、false
その他(発展編)
16進数のリテラル
16進法(hexadecimal) を使用したい場合は、数字の先頭に0xまたは0Xを付けます。
16進法の数字は0~9とa~fのアルファベットで構成されます。アルファベットは小文字と大文字の使用が可能です。
2進数のリテラル
2進法(binary)を使用したい場合は、数字の先頭に0bまたは0Bを付けます。
※C#7.0から2進数のリテラルが導入されました。
※いきなりアルファベット(xまたはb)から始まらないのは型の解釈がスムーズにできるようにするためでしょう。例えば、変数は、最初の1文字目に数字を使うことを許されていません(命名規則上)。逆に言えば、最初の一文字目で、数値かそれ以外か(変数などの識別子)を判断しています。16進法(2進法)のリテラルで、最初に一文字目に数字の0を持っている設計になっているのは、数値かそれ以外か判別を楽に行うためでしょう。
ソースコード(16進法と2進法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Literal01 { class Program { static void Main(string[] args) { int num16; num16 = 0x1a; Console.WriteLine("1a(16進法):"+num16); num16 = 0XFF; Console.WriteLine("FF(16進法):" + num16); int num2; num2 = 0b101; Console.WriteLine("101(16進法):" + num2); num2 = 0B0111; Console.WriteLine("0111(2進法):" + num2); } } } |
実行結果
1a(16進法):26
FF(16進法):255
101(16進法):5
0111(2進法):7
サフィックスとは
サフィックス(suffix)とは、英語では「接尾語」といった意味を持ちます。
数値リテラルの型を明示したい場合にサフィックスを使用します。
データ型 | サフィックス |
ulong | u(U) |
long | l(L) |
ulong | ul(UL,uL,Ulなど) |
double | d(D) |
float | f(F) |
decimal | m(M) |
サフィックスは小文字でも大文字でも構いません。
ただし、小文字のエル(l)は数字のイチ(1)と紛らわしいので、使用を控えましょう。
※Visual Studioで小文字のエル(l)をサフィックスとして使用すると警告を受けます。
※ulongのサフィックスは片方が小文字で、もう片方が大文字表記することは可能です、また、UとLの順番も変更することができます。例えば、Luというサフィックスでもulong型と認識してくれます。
long型で数字を使いたいからといって、必ずしもサフィックスLを付ける必要はないです。
なぜなら、数値リテラルは、指定しなければint型として扱われますが、long型はint型を暗黙的に変換できるからです。
逆に、float型とdecimal型は暗黙的にdouble型を変換できません。
float型(32ビット)とdouble型(64ビット)を比較するとわかりますが、float型の方が持っている情報量は少ないです。
decimal型(10進演算)は、double型(2進演算)の完全な上位互換というわけではありません。そのため、どうしたってうまく変換できない部分が生じることがあります。
以上の点で、float型とdecimal型を扱いたい場合は、サフィックスを付ける必要があります。(明示的なキャストを行えば、サフィックスの使用を回避できますが、サフィックスを使用した方が断然楽です)
※long型ではサフィックスを指定しなくてもエラーになりませんが、float型とdecimal型ではエラーになります。(下図)
ソースコード(サフィックスの付け方)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Suffix02 { class Program { static void Main(string[] args) { uint u = 100u;//100U long L = 200L;//200lは警告をうける ulong uL = 300uL;//300Luでも可能 double d = 5.0;//5.0d、5.0Dと明示的にサフィックスを付けなくてもよい float f = 10.0f;//10.0Fも可能 //float f = (float)10.0;//明示的なキャスト decimal de = 20.0M;//20.0mも可能 } } } |
関連記事
~プログラミングを勉強してみませんか?~
TechAcademy [テックアカデミー] は無料の体験講座が用意されているので、気軽に体験できます。
※私(サイト主)も無料体験講座を実際に受けてみました(→感想)