2009年09月17日
【C#】short型 + short型 = int型
異なる型どうしを演算しようとすると、結果はサイズが大きいほうの型で
返ってくるのが一般的だというのは感覚的にわかっているのですが。。。
double型 + int型 = double型 みたいな。
で、short+shortの結果をshort型に入れようとすると、エラーになってびっくりした。
short x = 5;
short y = 12;
//ビルドエラー:型 'int' を型 'short' に暗黙的に変換できません
short z = x + y;
//キャストすればOK
short z = (short)(x + y);
調べると「代入演算子の右側にある算術式が既定で int に評価される」とヘルプに載ってた。
sbyte+sbyteも同様にintで返ってくるみたい。
こういう決まりを単項数値昇格とか二項数値昇格っていうらしい。
参考↓
int (符号付き 32 ビット整数:-2,147,483,648 ~ 2,147,483,647)
short(符号付き 16 ビット整数:-32,768 ~ 32,767)
sbyte(符号付き 8 ビット整数:-128 ~ 127)
この記事がお役に立ったようでしたらぜひクリックお願いしますm(_ _)m

返ってくるのが一般的だというのは感覚的にわかっているのですが。。。
double型 + int型 = double型 みたいな。
で、short+shortの結果をshort型に入れようとすると、エラーになってびっくりした。
short x = 5;
short y = 12;
//ビルドエラー:型 'int' を型 'short' に暗黙的に変換できません
short z = x + y;
//キャストすればOK
short z = (short)(x + y);
調べると「代入演算子の右側にある算術式が既定で int に評価される」とヘルプに載ってた。
sbyte+sbyteも同様にintで返ってくるみたい。
こういう決まりを単項数値昇格とか二項数値昇格っていうらしい。
参考↓
int (符号付き 32 ビット整数:-2,147,483,648 ~ 2,147,483,647)
short(符号付き 16 ビット整数:-32,768 ~ 32,767)
sbyte(符号付き 8 ビット整数:-128 ~ 127)
この記事がお役に立ったようでしたらぜひクリックお願いしますm(_ _)m

[C#]日付チェック(スラッシュありなし両方対応)
[C#]8桁の数字(文字列)をDateTime型に変換
フォーム上のテキストボックスコントロールを取得して入力チェック
正規表現
【C#】decimal サフィックスのm
【C#】ドロップダウンリストにListItemをAddする
[C#]8桁の数字(文字列)をDateTime型に変換
フォーム上のテキストボックスコントロールを取得して入力チェック
正規表現
【C#】decimal サフィックスのm
【C#】ドロップダウンリストにListItemをAddする
Posted by ようすけ at 09:00│Comments(2)
│C#
この記事へのコメント
このエラーにハマってた所でした。
勉強になりました!
ありがとうございます。
勉強になりました!
ありがとうございます。
Posted by のりお at 2011年08月21日 21:55
intなんか使ってないのに変だなと思って調べてここを見つけました。理由も書いてあってすっきりしました。ありがとうございます。
Posted by けいたろう at 2023年11月09日 15:44