int x=0x12345678;
char* c=(char*)&x;
x=c[0]<<24+c[1]<<16+c[2]<<8+c[3];
x==0!!!!!!!!!
А если так то что и ожидалось
x=c[0]<<24|c[1]<<16|c[2]<<8|c[3];
x==0x78563412
Здравствуйте, WolfHound, Вы писали:
WH>WH>int x=0x12345678;
WH>char* c=(char*)&x;
WH>x=c[0]<<24+c[1]<<16+c[2]<<8+c[3];
WH>
WH>x==0!!!!!!!!!
WH>А если так то что и ожидалось
Плохо ожидалось. Приоритет + выше, чем <<.
Здравствуйте, WolfHound, Вы писали:
WH>WH>int x=0x12345678;
WH>char* c=(char*)&x;
WH>x=c[0]<<24+c[1]<<16+c[2]<<8+c[3];
WH>
WH>x==0!!!!!!!!!
WH>А если так то что и ожидалось
WH>WH>x=c[0]<<24|c[1]<<16|c[2]<<8|c[3];
WH>
WH>x==0x78563412
WH>
5.8.1:
...
The behavior is undefined if the right operand is negative, or greater than or equal
to the length in bits of the promoted left operand.
В данном случае операнды имеют тип char, длина которого в битах 8, т.е. все присутствующие в данных выражениях сдвиги ведут к undefined behavior, что впрочем подтверждается результатом.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, WolfHound, Вы писали:
WH>>WH>>int x=0x12345678;
WH>>char* c=(char*)&x;
WH>>x=c[0]<<24+c[1]<<16+c[2]<<8+c[3];
WH>>
WH>>x==0!!!!!!!!!
WH>>А если так то что и ожидалось
WH>>WH>>x=c[0]<<24|c[1]<<16|c[2]<<8|c[3];
WH>>
WH>>x==0x78563412
WH>>
B>5.8.1:
B>B>...
B>The behavior is undefined if the right operand is negative, or greater than or equal
B>to the length in bits of the promoted left operand.
B>
B>В данном случае операнды имеют тип char, длина которого в битах 8, т.е. все присутствующие в данных выражениях сдвиги ведут к undefined behavior, что впрочем подтверждается результатом.
Сам прочитай приведенную тобою же цитату. Речь идет о
promoted left operand. Promoted operand в данном случае будет иметь тип 'int'.
Здравствуйте, Lexey, Вы писали:
L>Плохо ожидалось. Приоритет + выше, чем <<.
... << RSDN@Home 1.0 beta 5 >>