2016-10-26 6 views
0

私はstatic_cast with bounded typesを見ています。境界型のstatic_castは実装依存ですか?

動作は実装固有ですか?換言すれば

long x = 70000; 
short y = static_cast<short>(x); 

は、Y = 4464(xの下位16ビット)を生成することが保証されている(16ビットのショートパンツと32ビットlong値を与えられますか)?または、リトルエンディアンのマシンでのみですか?

私はいつもそう思っていましたが、私はビッグエンディアンマシンで奇妙な結果を得て、それらを理解しようとしています。

ここに実際の問題があります。私は2つのtime_t(おそらく64ビット)を "知っている"とは、いつもお互いの合理的な秒数以内にあるでしょう。私はprintfとその違いを表示したい。コードはマルチプラットフォームなので、time_tの根底にあるタイプについて心配するのではなく、static_cast <((time2-time1))を渡すprintf( "%d")を実行しています。 printfが(time2!= time1)のブロックに入っているにもかかわらず、ゼロが表示されています。 (printfはライブラリにあり、代わりにcoutを使用することは妥当ではありません)

static_castはおそらくtime_tの上位32ビットを返しますか?

これを行うより良い方法はありますか?

ありがとう、

+0

奇妙な。 static_cast angle-bracket int anglebracket(time2-time1)と入力しますが、表示されるのはstatic_cast(time2-time1)だけです。 static_cast \ \>(time2-time1)なんかのようにエスケープする必要はありますか? – Charles

+0

解決済み。アンパサンド構文を使用する必要があります。 – Charles

答えて

0

おそらく問題はstatic_castとは無関係だったと思います。 #ifdefプラットフォームの混乱。誰かが答えを知っていれば、私はまだ興味があるだろう。

関連する問題