如何合并两个8位寄存器的值
把两个8位寄存器的值合并,int a,int ba=a<<8+b; 这样可以吗 你这里的a跟b不是八位的吧- -
如果a,b都是低八位有效的话这样是可以的 好像<<的优先级没有+高,估计会悲剧。加个括号是好习惯。 http://baike.baidu.com/view/1516130.htm补补C语言基础。 NEWT 发表于 2013-11-14 23:11 static/image/common/back.gif
你这里的a跟b不是八位的吧- -
如果a,b都是低八位有效的话这样是可以的
应该怎么写呢 wingerchen 发表于 2013-11-14 23:20 static/image/common/back.gif
好像
对对- -应该用|
位运算就跟位运算一起,多个+号有点不搭 大傻师 发表于 2013-11-15 01:11 static/image/common/back.gif
对对- -应该用|
位运算就跟位运算一起,多个+号有点不搭
完整的写法应该是怎样的呢 大傻师 发表于 2013-11-15 01:11 static/image/common/back.gif
对对- -应该用|
位运算就跟位运算一起,多个+号有点不搭
+如果没溢出的话没事,如果溢出了就杯具了。
而且,还有一个重要的问题,就是得搞清楚CPU是大端的还是小端的,以及长整型Int是编译器实现还是CPU字长大小。在大端上面8位字节应该是在字的高位。 wye11083 发表于 2013-11-15 07:34 static/image/common/back.gif
+如果没溢出的话没事,如果溢出了就杯具了。
而且,还有一个重要的问题,就是得搞清楚CPU是大端的还是小 ...
这个问题明显与大小端无关。。。。 我一般这么写
uint16 F(uint8 a,uint8 b)
{
union{
uint8 u8;
uint16 u16;
}R;
R.u8=a;
R.u8=b;
return R.u16
}
as9901 发表于 2013-11-15 07:54 static/image/common/back.gif
我一般这么写
uint16 F(uint8 a,uint8 b)
这个可以有,我也这样用过,关键看你的ab的位数和有效位数。 8位的话就只能是a=a+b; char a,b;
int c;
c=a<<8 + b; 加256不可以? 我一般这么写
a = ((uint16_t)a<<8) + b; 用联合数据类型 asj1989 发表于 2013-11-15 09:02 static/image/common/back.gif
我一般这么写
a = ((uint16_t)a
这样写可以不用管是大端还是小端.
我一般也是这样写的,不差编译后多几行代码的. 你说的是两个普通变量还是51的特殊寄存器,如果是51的特殊寄存器,可以用sfr16定义16位寄存器,标准51里也有几个sfr16的寄存器,你可以参考下。
如果是普通变量,就按上面的做法吧。 本帖最后由 sunocean 于 2013-11-15 13:41 编辑
WORD a(BYTE low,BYTE high)
{
WORD result=0;
result=(high<<8)|low;
return result;
}
uint16_t func(int a, int b)
{
return (a << 8) | b;
}
两个8位的变量合并后应该是16位长,
如果使用算数运算就是:
uint16_t c;
c = 256 * a + b;
unsigned int a,b;
a=((unsigned char) a<<8) | ((unsigned char) (b & 0x00ff));
char a, char b , int c
c = (a << 8) + b; // 合并 c = a;
c = (c << 8) + b;// 这样比较好 int result;
union
{
int a=0;
char b={0};
}c;
c.b=reg1;
c.b=reg2;
result=c.a;
int c, char a, char b;
c = a;
c <<= 8;
c += b; lcofjp 发表于 2013-11-15 07:43 static/image/common/back.gif
这个问题明显与大小端无关。。。。
+1
C已经把依赖CPU特性的东西封装好了. 除非强行用指针访问. 悬赏2莫元?这也太少了吧
页:
[1]