关于C/C++中的几个数据左右移动问题。
请问各位前辈,以下五个函数分别是什么功能呢?转化的结果有什么意思呢?
unsigned short V1(unsigned short x){
return (((x&0xFF)<<8)|((x>>8)&0xFF));
}
int V2(int x){
return (((x&0xFFFF)<<24)|(((x&0xFFFF)<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|((x>>24)&0xFFFF));
}
unsigned long V3(unsigned long x){
return (((x&0xFFFF)<<24)|(((x&0xFFFF)<<8)&0x00FF0000)|((x>>8)&0x0000FF00)|((x>>24)&0xFFFF));
}
unsigned long V4(unsigned char* x){
return ((*x<<24)+(*(x+1)<<16)+(*(x+2)<<8)+*(x+3));
}
unsigned short V5(unsigned short x){
return (unsigned short)((x>>8)+((x&0xFF)<<8));
}
问题点数:100、回复次数:3Top
1 楼gladiatorcn(角斗士)回复于 2003-12-01 17:09:16 得分 20
V1把16位无符号整数的高8位和低8位交换Top
2 楼skywarship(很菜的小李)回复于 2003-12-01 17:19:02 得分 5
我怎么觉得好像不对啊
V1的表达式如果是从左到右执行的话x&0xff就已经把高8位清0了,怎么能说与低8位交换呢Top
3 楼sklchgg(程程)回复于 2003-12-01 17:47:52 得分 75
1.V1如gladiatorcn() 所说
2.V2也是反转,若用这样的形式表示int(ABCD: ABCD各代表一个字节),调用V2后返回值为DCBA。
3.V3跟V2功能类似,仅仅是参数及返回值不同。
4.V4表示把x指向的内存字节从当前指针开始共四个字节组合成一个unsigned long,如x指向“ABCD....”,则得到的返回值为A的asc2码65*2的24次方+B的asc2码66*2的16次方+A的asc2码67*2的8次方+A的asc2码68*2的0次方。
5.V5跟V1功能类似,仅仅是参数及返回值不同。Top




