0
私は、次のプログラムを実行すると4004桁の番号が印刷されています特定のshortとdoubleの変換が4004桁の数字に等しいのはなぜですか?
double d;
short s;
d = 23234564568788.5;
d = s = d;
printf("%lf\n", d);
なぜ?
私は、次のプログラムを実行すると4004桁の番号が印刷されています特定のshortとdoubleの変換が4004桁の数字に等しいのはなぜですか?
double d;
short s;
d = 23234564568788.5;
d = s = d;
printf("%lf\n", d);
なぜ?
これはUBです。たとえば、私のマシンでは、結果は-32768.0
です。
私のgccは、この警告を出力します:warning: conversion to 'short int' from 'double' may alter its value [-Wfloat-conversion]
これは、Cを書き込む方法ではないので(コードが正しく動作することを期待している場合)、このようにしないでください。
変換時に符号付き整数がオーバーフローするのはUBです。それは誰にも分かりません。 https://ideone.com/K4diK7 – Sneftel
私がリンクしている詐欺の種類は異なりますが、答えは同じです。 – user694733
これはオーバーフローではなく、これは値が表現できない場合にすぎません。しかし、その動作は未定義です。だからあなたは '23234564568788.5'や浮動小数点例外を得るかもしれません...あるいは' Hello world' –