と仮定、あなたはどのようにして負数をより広い型に変換するのですか?
short num = -10;
int num_casted = (int)num;
std::cout << num_casted << endl; // prints -10.
を持っnum_casted
はまだ-10
ない0xFA000000
である私はなぜ、疑問に思います。
biggenに変換されたより小さい型の負数はどのようにして変換されますか?誰かが私を啓発するだろうか?私は、ゼロを使って余白を埋めることを除いて、いくつかの論理があると仮定します。
これは最も驚くべき方法です。 'num'は値-10を持つので、' num_casted'は-10の 'int'表現です。 – chris
[Sign extension](https://en.wikipedia.org/wiki/Sign_extension)。これは値の変換であり、ビットの再解釈ではないので、シフトされたゴミの代わりにコヒーレントな '-10'を検索する作業が行われます。 – Quentin
より大きな型の同じsignednessに変換すると、そのより大きな型は必ず同じ値を表すことができるため、同じ値を持つ表現に変換されます。 – user2079303