Код:
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.
Есть ли какая-то причина, по которой я получаю другой результат при запуске программы выше?
Обновление: я знаю, что это поведение Undefined, но тем не менее означает ли это, что преобразование десятичного числа в двоичное выполняется не как обычно: справа налево, а вместо этого выполняется слева направо, например:
binary(a)=1000 0000 | 0000 0000
поэтому *(p)=1;
создаст binary(a)=1000 0000 | 0000 0000
, что равно 1
в десятичной системе
, а *(p+1)=2;
создаст binary(a)=1000 0000 | 0100 0000
, что будет 513
что точно соответствует результату программы.