C 语言 '|' 和 '+'的区别

例:设无符号长整型变量u的4个字节由低到高依次为字节1、字节2、字节3、字节4。请写一个C表达式,将u的字节1和字节3以及字节2和字节4进行交换。如:设交换前u=0x56781234,则交换后u=0x12345678。

试卷答案是u=(u&0xff)<<16|u>>16&0xff|(u&0xff00)<<16|u>>16&0xff00;

而我的答案是u=(u&0xff)<<16+u>>16&0xff+(u&0xff00)<<16+u>>16&0xff00;

两者不同之处就是将'|'换成了'+',但是结果大不一样。

以下是我的比较代码::

//software:VC ++ 6.0
//OS: Windows xp 32 bit
#include<stdio.h>
main()
{
unsigned long int u = 0x56781234;

printf("%lx\n",(u&0xff)<<16);

u = 0x56781234;
printf("%lx\n",u>>16&0xff);

u = 0x56781234;
printf("%lx\n",(u&0xff00)<<16);

u = 0x56781234;
printf("%lx\n",u>>16&0xff00);

u = 0x56781234;
u=(u&0xff)<<16|u>>16&0xff|(u&0xff00)<<16|u>>16&0xff00;
printf("%lx\n",u);

u = 0x56781234;
u=(u&0xff)<<16+u>>16&0xff+(u&0xff00)<<16+u>>16&0xff00;
printf("%lx\n",u);
}


不知道有没有大神知道为什么这样?(待解决)

猜你喜欢

转载自blog.csdn.net/IMBA_09/article/details/79417496