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

我想把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了!肯定行的!呵呵。
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言位运算问题?
c语言位运算问题解答:要解答这个问题我们先来看一个例子,代码如下图一,图中右边是问题中得到代码,左边是这段代码的汇编指令。两种情况的不同点详细说明如下:第一种情况:printf("%d",2>>64);由图中的汇编代码可以看出,如果两个数都是常数的情况下,代码中是不含对应的汇编指令的,因为编译器...

c语言中,如何实现位运算?
c语言:取整型变量x中的第p位开始的n个bit位,可以采用位运算的方法。先向左移位,丢弃前面不需要的位,再通过向后移位,丢弃后面不需要的位,最后再向左移位到原来的位置,就可以了。1\/\/num&(num-1)=(1111)&(1110)=(1110)2\/\/num&(num-1)=(1110)&(1101)=(1100)3\/\/num&(num-1)=(11...

c语言位运算-3>>2,为什么是-1
-3的二进制表示为 1000 0011 符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

c语言的位运算疑惑
2:ASCII编码表中 32表示的是空格符号。 char中寸的是ASCII编码,所以是32 3:位移运算:>>表示右移位 我以8为例。8的二进制是1000, 8>>1对应的二进制形式就是1000——0100看到变化了没有。所以右移位相当于这个数除2 左移位你看看 01000——10000是16了。相当扩大一倍。32的二进制是 0010...

C语言 位运算
C语言中的位运算提供了一种高效的处理二进制数据的方法。首先,我们有取反操作,0取反变成1,1取反则变成0。对于位左移(<<),比如1<<n,意味着将1向左移动n位,相当于数值乘以2的n次方。右移(>>)与左移类似,数值除以2的n次方。接着是按位与(&),当1与任意数结合时,结果保持原数,0...

C语言中位运算符的结果为0还是1呢?
0与0的结果是0,教材中出错了。与运算的运算规则是0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1”,结果才为“1”,否则为0。按位与运算 按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只要对应的二个二进位都为1时,结果位就为1。参与运算...

c语言位运算
C语言中的位运算符用于操作二进制位。这些运算符直接对整数的二进制位进行操作,是低级语言操作的重要组成部分。它们对于优化程序性能、实现特定功能非常关键。具体的位运算符 1. 位移运算符:这两个运算符用于将二进制位向左或向右移动指定的位数。例如,`x << 2`表示将x的二进制表示向左移动两位,...

C语言位运算题目
一、位运算符c语言提供了六种位运算符:&按位与 |按位或 ^按位异或 ~取反 <<左移 >>右移 1.按位与运算按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式...

C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位...
右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000;i=i>>1;\/\/i的值不会变成0x40000000,而会变成0xc0000000 2、左移,乘以2左移n位乘以2的n次方;先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符。

C语言中位运算符问题 这句话怎么解释啊
这句话的理解有这样一个基础,那就是右移n位相当于除以2的n次方,而这个基础就是对于无符号数来说的。比如无符号数8,如果用8位二进制表示,就是二进制的0000 1000,右移0位,也就是不移动,等于8,就等于8除以1,也就是8除以2的0次方;右移1位,0000 0100 ,等于4,就等于8除以2,也...

相似回答