コードを実行すると、私はy=-124
とz=4294967172
を得ることができますか? (x<128
あればどんな問題がイマイチというテスト)文字変数が間違っている
char x=132;
signed y=x;
unsigned z=x;
cout<<y<<endl;
cout<<z<<endl;
コードを実行すると、私はy=-124
とz=4294967172
を得ることができますか? (x<128
あればどんな問題がイマイチというテスト)文字変数が間違っている
char x=132;
signed y=x;
unsigned z=x;
cout<<y<<endl;
cout<<z<<endl;
char
あなたがchar x = 132
を書くときに、あなたが実際にこれを行う、8ビットでありますシステムは符号拡張を使用します。つまり、符号ビットをすべてのビットにコピーします。だから、値が次のようになります。
1111 1111 1111 1111 1111 1111 1000 0100
あなたは符号付きの値としてそれを解釈した場合、それは-124だし、あなたが最初の行にunsigned
ようchar
を定義した場合、符号なし値として、それは、また4294967172.
です符号拡張が符号なしの値に対して行われないため、常に132になります。
うわー、ありがとう、非常に興味深いことに、私はここに来ました。また、ジェームスマクネリスのおかげで答えを完了し、これを解決する方法を教えてくれました – Arash
最初の行xが10000100(132は10000100b)の後、マシンの-124の値です(hereを参照)。
したがって、2行目の後yは-124です。
そして3行目の後zは111 ... 1110000100bです。負の数を設定しているため上位ビットに1がありますが、コンパイラのプリント時にzが符号なしなのでバイナリ値が出力されます。
x = 1000 0100
signed int
とunsigned int
、32ビットであり、そしてあなたに「小さい」変数の値を割り当てるたび:
@ iammilind:それは完全に間違っています。 'x'の後に無名のパディングバイトがあっても、プログラムの意味には決して影響しません。 –