关于C语言中位运算的问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 00:13:35
我想把ch[]数组里的ch[4]-ch[7]中的元素反序存入一个长整型变量中.
例:
unsigned char ch[8]={0x49,0x49,0x00,0x2a,0xff,0x0f,0x35,0x01};
出来的长整形变量值应为0x01350fff,但是我的程序运行出来结果有问题.哪个好心人帮我改改~~~~~~~~`急~~~~~~~

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{int i;
unsigned char ch[8]={0x49,0x49,0x00,0x2a,0xff,0x0f,0x35,0x01};
long int offset=0;
for(i=7;i>4;i--)
{
offset=offset|ch[i];
//printf("%x",offset);
// printf("\n");
offset=offset<<(8*(i-4));
}
offset=offset|ch[4];
printf("%x",offset);

}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int i;
unsigned char ch[8]={0x49,0x49,0x00,0x2a,0xff,0x0f,0x35,0x01};
long int offset=0;
// for(i=7;i>4;i--)
for(i=7;i>=4;i--) //这里加上一个等于
{
offset=offset|ch[i];
// printf("%x",offset);
// printf("\n");
// offset=offset<<(8*(i-4));
if(i!=4) //这一句是加的,最后一次不用左移八位了。
offset=offset<<8; //这里不能这么移,只能左移8位,因为你循环四次啊
//还有,左移八位这一句只能执行三次,如果你放到上面,就不用加判断
//语句了,如果你坚持要放在这,最后一次不用移了,至于为什么,
//你自己考虑考虑啦
}
// offset=offset|ch[4]; //按我的改法,这一句不要加了
printf("%x",offset);
}

//OK了!肯定行的!呵呵。