p.056 補足:組み込み型と文字/論理/文字列リテラル
・既出の通り、string型変数には文字列リテラルを代入できる ※内部的には文字列リテラルが先にメモリ上に展開され、その参照が代入される 例: string atmarks = "@@@"; ・char型変数には文字リテラルを代入できる ・文字リテラルは1文字をシングルコーテーションで囲んだもの 例: char atmark = '@'; ・bool型変数には論理(真理値)リテラルを代入できる ・真理値リテラルは真偽をtrue/falseで示すもの ※真偽は正しいかどうかではなく「あてはまる/あてはまらない」「はい/いいえ」「済/未済」などの意味に用いる ※C/C++では整数値で論理(真理値)を扱えるが、C#ではできない
p.056 型を変換する
・ある整数型から、その範囲を含む整数型へは暗黙の型変換が行われる 例: int i = 100; long l = i; //longはintの範囲を完全に含むので暗黙の型変換 ・なお、値が範囲内でも型が範囲を完全に含まなければ暗黙の型変換は行われない 例: int i = 100; uint u = i; //uintはintの範囲を完全に含まないのでエラー ・上の例の場合はプログラマの責任(判断)で強制的に型変換することが可能で、これをキャスト(型キャスト)という ・キャストの書式: (型)値または式 //変数1個でも式扱い 例: int i = 100; uint u = (unit)i; //uint型にキャストすればOK ・キャストを利用すると整数型への実数型からの代入が可能になり、小数点以下があれば切り捨てられる 例: int seisuu = (int)3.5; //int型にキャストすれば3になり代入OK ・string型へのキャストはできないが、長さゼロの文字列""への連結により、整数、実数、文字を文字列にすることができる 例: string text = "" + 30.14; //文字列"30.14"になる
アレンジ演習:p.057 Chap1_11_1.cs
・以下の確認を追加しよう ・sbyte型の変数を100で初期化し、short型の変数に代入できること ・intの変数を100で初期化し、uint型にキャストすればuint型の変数に代入できること ・実数-3.5をint型にキャストすると、-3になるか-4になるのか ⇒-3になる。0に近い方の整数になるので負の数でも見かけ上、小数点以下カットになる ・文字'@'を文字列""に連結すると、string型の変数に代入できること
作成例
using UnityEngine;
public class Chap1_11_1 : MonoBehaviour {
void Start() {
int seisuu = (int)3.5; //キャストで小数点以下切り捨てで3になる
string text = "" + 110; //連結で文字列"110"になる
Debug.Log(seisuu + text); //連結で文字列"3110"になる
//sbyte型の変数を100で初期化し、short型の変数に代入できる
sbyte sb = 100; short sh = sb; //暗黙の型変換
Debug.Log("sh = " + sh); //100になる
//intの変数を100で初期化し、uint型にキャストすればuint型の変数に代入できる
int i = 100; uint u = (uint)i; //uintにキャスト
Debug.Log("u = " + u); //100になる
//実数-3.5をint型にキャストすると、-3になるか-4になるのか
Debug.Log("-3.5をint型にキャストすると " + (int)-3.5); //-3になる
//文字'@'を文字列""に連結すると、string型の変数に代入できる
string s = "" + '@'; //文字列に文字を連結すると文字列
Debug.Log("s = " + s); //文字列"@"になる
}
}
p.056 型を変換する:補足
・全く関係のない型から型への変換は基本的にはできない ・例外として、文字型と整数型のキャストがあり、文字が内部的に整数値である文字コードで扱われているため ・例:(int)'A' ⇒ 文字'A'の文字コードである65になる(10進数に変換される) ・例:(char)66 ⇒ 文字コード66である文字'B'になる
ミニ演習 mini057.cs
・上記の例を試して、結果を表示しよう ・また、文字コードを16進数(前に0xを付ける)で与えてみよう
補足: .NET型表記について
・例えばVSで「200000000」にマウスを乗せる「readonly struct System.Int32」と表示される ・この「System.Int32」がC#を含む.NETフレームワークにおける型の表現で、 C#側のエラーメッセージにおいても使われることが多い ・int、doubleなどの型名はC言語由来で、C言語の型の定義があいまいであること (例えばint型の大きさは不定)がトラブルの原因になる ・そこで、開発現場でも.NET型表記を用いる事がある(チームルールで統一することもある) ・例: short ⇒ System.Int16 int ⇒ System.Int32 long ⇒ System.Int64 float ⇒ System.Single double ⇒ System.Double uint ⇒ System.UInt32 ulong ⇒ System.UInt64
提出: ミニ演習 mini057.cs