こんにちは、NAKAといいます。C言語基礎を確認させてください。
pow()っていう関数を使うと思うのですが
例えば2^15って0x8000だと思うのですが、実際やってみると0x7FFFになってしまいます。
NAKAさん、こんにちは。Sugachanceです。
NAKAさんの場合、RL78なのかRXなのかRH850なのかはたまた他のやつなのか…分かりませんが、手元のRL78の環境の場合仰るように0x7FFFになりました(intに渡した時)。pow()関数自体、引数も戻値もdouble型ですが、RL78の環境だとdoubleはfloatと同じ4バイト(だった気がするので)そのあたりの精度・切り捨てとキャストの兼ね合いな気がします。
double ans;int ansi;ans = pow(2,15);ansi= pow(2,15);
の結果をウォッチで見てみたらans 3.276798E+004 float(4)ansi 32767 (0x7fff) int(2)
ってなってました。先日、Cに関して素人レベルだと怒られてしまったのでプロレベルの詳しい方の解説が欲しいところです!
doubleのオプションを付けたらans 3.276800000000004E+004 double(8)ansi -32768 (0x8000) int(2)になりました!
Sugachanceさん お久しぶりです。ナカです。いつもありがとうございます。僕も、基礎がないのですぐつまずいちゃいます。
じつは先日までpow関数も知らずに A=2^15;とか書いちゃって「おかしいなあ計算結果が全然ちがう!」とかやってました(*_*)ビルドでエラーが出ないと正しいと思いこんじゃいますね。