C言語 キャスト演算子についての質問です。 int x = 5, y = 3; int a, b, c; a = (double)(x / y); b = (double)x / y;

補足

a, b, cはdouble型でした。 失礼しました。

C言語関連 | プログラミング107閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

その他の回答(3件)

0

どのように表示されるのかは実際に実行してみるのがよろしいかと。 理由は「そういうルールだから」です。

0

演算子の優先順位の問題です 「キャスト演算子」は「単項演算子」なので、優先順位は「2項演算子」よりだいたい高いです だから b = (double)x / y; は b = ( (double)x ) / y; と同じです でも、最も優先順位が高い「()演算子」には負けるので a = (double)(x / y); は a = (double)( (x / y) ); と同じです → 記憶に頼っているとしょっちゅう勘違いするので 私は演算子の優先順位は覚えないで ()で結合順を指定する事にしているが b = (double)x / y; には「()を補うべきだ」と思ったことはない!

0
ID非公開

2022/1/26 2:03

aの場合は、最初に5/3が計算されて1となり、それをdoubleにすることで1.0となります。 bの場合は、最初にxがdoubleに変換されて5.0となり、それを3で割ることで1.6となり、それがbに代入されます。 cの場合は、同様です。 計算のイメージはこんな感じです。 (数学の式としては成り立ちません。あくまでもイメージです) a = (double)(5 / 3); = (double)1 = 1.00000 b = 5.0 / 3 = 1.66666 c = 5 / 3.0 = 1.66666