コード:
int main(){
short a=1; // #1
char *p=(char*)&a;
*(p)=1; // #2
cout << a << endl; // Output: 1
*(p+1)=2; // #3
cout << a << endl; // Output: 513
}
私の理解では、出力は下の図の 257 と 258 のようになるはず
です。上記のプログラムを実行したときに異なる結果が得られた理由はありますか?
更新:
これは未定義の動作であることはわかっていますが、それでも、これは 10 進数から 2 進数への変換が通常どおりに行われないことを意味しますか?たとえば、右から左ではなく、左から右に行われます:
binary(a)=1000 0000 | 0000 0000
so*(p)=1;
はbinary(a)=1000 0000 | 0000 0000
これ1
を 10 進数
で*(p+1)=2;
作成binary(a)=1000 0000 | 0100 0000
し、これ513
を正確にプログラムの出力にします。