byte型の四則計算について – プログラミング – Home

byte型の四則計算について
 
通知
すべてクリア

[解決済] byte型の四則計算について


あけみ
 あけみ
(@あけみ)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

超初心者です。

byte a=1;
byte b=2;
で,
a++;
a+=; はokなのに,
1) a=a+1; は何故コンパイルエラーになるのですか?
2) 逆に,a++,a+=;は何故okなのですか?

a++;は内部的にはa=a+1;をやっていると思ったのですけど。


引用未解決
トピックタグ
あけみ
 あけみ
(@あけみ)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

超初心者です。
(質問に誤りがありました。)

byte a=1;
で,
a++;
a+=1; はokなのに,
1) a=a+1; は何故コンパイルエラーになるのですか?
2) 逆に,a++,a+=1;は何故okなのですか?

a++;やはa+=1;内部的にはa=a+1;をやっていると思ったのですけど。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

二項演算子のオペランドに対しては「二項数値昇格」という規則が適用されるためです。

「Java言語既定」
5.6.2 二項数値昇格
http://www.y-adagio.com/public/standards/tr_javalang2/conversions.doc.html#170983

この規則によると、a+bという式でaとbがdouble,float,long以外の型の場合
a、bともにintに拡大変換されます。
そして、int+intはintとなり、intよりもサイズの小さいbyte型の変数に
代入することはできないため、エラーとなります。

a++ や a+=1 で同様の問題が起こらないのは、演算を行った後で
値を代入する変数の型に縮小変換することが定められているためです。

「Java言語既定」
15.14.1 後置増分演算子
http://www.y-adagio.com/public/standards/tr_javalang2/expressions.doc.html#39438
15.26.2 複合代入演算子
http://www.y-adagio.com/public/standards/tr_javalang2/expressions.doc.html#5304

これらの規則によると、上記のa++やa+=1は、
a = (byte)((a)+(1)) と等価となります。


返信引用
あけみ
 あけみ
(@あけみ)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました