トップページ > プログラム > 2015年11月30日 > VtHFUkMk

書き込み順位&時間帯一覧

15 位/161 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000100000001103



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net

書き込みレス一覧

スレを勃てるまでもない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に変換されてから計算されるからです。
どうしてそのようになっているのですか?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。