- スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
8 :デフォルトの名無しさん[sage]:2015/11/30(月) 13:51:44.68 ID:VtHFUkMk - unsigned short同士の掛け算がunsigned int ではなくてintに昇格するのはどうしてですか?
|
- スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
10 :デフォルトの名無しさん[sage]:2015/11/30(月) 21:26:57.04 ID:VtHFUkMk - その仕組みはわかるんですけど、そこでどうしてunsigned intではなくてintでなければならないのかがわかってません。
short 2バイト int 4バイトだとして 65535 * 65535 の結果はINT_MAXより大きいですが、unsigned intの範囲で安全に表現できますよね。 どうして不確からしさが増すような方向への変換がデフォになってるのかという疑問もあります。
|
- スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
12 :デフォルトの名無しさん[sage]:2015/11/30(月) 22:19:42.99 ID:VtHFUkMk - unsigned shortがintに拡張されてから計算されるというのは最初からわかってるんですが、
unsigned shortの拡張される先がunsigned intではなくてintでなければいけない理由がわかっていないんです。 下の2行はunsigned intにしておけば掛け算にたいしても安全ではないか、ということです。 現実的ではないのかもしれませんがintが2byteの場合だと unsigned short * unsigned shortの結果はunsigned int*unsigned intと一緒の結果ですよね。 それがint 4byteの場合だと結果はint*intになってINT_MAXをオーバーフローして困ったことになると思うんです。 なんでそうなってしまうかといえば、unsigned intではなくてintに変換されてから計算されるからです。 どうしてそのようになっているのですか?
|