16,372
社区成员




#include <stdio.h>
unsigned short int ui;
signed short int si;
int main() {
ui=(unsigned short int)0x8000u;
si=( signed short int)0x8000;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=ui>>1;
si=si>>1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
printf("--------------\n");
ui=(unsigned short int)0x8000u;
si=( signed short int)0x8000;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=(( signed short int)ui)>>1;
si=((unsigned short int)si)>>1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
return 0;
}
//ui=32768
//si=-32768
//ui=16384
//si=-16384
//--------------
//ui=32768
//si=-32768
//ui=49152
//si=16384
BYTE chTest[] = { 0x54, 0x5A, 0xF7, 0x14 };
ULONG nTime = ((ULONG)chTest[0] << 24) |
((ULONG)chTest[1] << 16) |
((ULONG)chTest[2] << 8) |
((ULONG)chTest[3]);
unsigned long nTime = (xx[0] << 24) + (xx[1] << 16) + (xx[2] << 8) + xx[3];
printf("nTime=%ld\n", nTime);
这样写,结果就对了。
原因是+,-运算符的优先级高于<<,>>运算符