对于移位只能采用整形的,而不能采用指针来弄。 如: unsinged long *p32; unsinged long p32s; p32s = 1111; p32 = &p32s; p32s = p32s<<16; //编译通过,结果是72810496 ,因为在1111的二进制后补来 16个0, p32<<16 ;//编译失败。不能为指针,非法操作。 p32s = 65535; //0xffffh; //对于整形的取位数: p32s = ((unsigned char)p32s); //这样的话就会取低8位,即0xffh; p32s执行后为255; //对于指针的取位数: unsigned char *p8; unsigned short *p16; unsigned short p16s = 65535; p16 = &p16s; cout<<"_____________"<<endl; cout<<p16<<endl; cout<<"_____________"<<endl; p16 = (unsigned short*)((unsigned char*)p16+0x10); cout<<p16<<endl; //从上面的执行结果可以知道,16 = (unsigned short*)((unsigned char*)p16+0x10);“只是”(这点很重要,不要以为取出后,转化为16位后,高8位为全0!)取出低8位,运算后,然后转化为16位。 cout<<"_____________"<<