usbboy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-03
  • 最后登录2002-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1474回复:5

有关KEILC51一个问题请教

楼主#
更多 发布于:2002-08-05 10:36
大家好,我在看CY开发板的FIMEWARE资料时发现有一个宏定义,我想来想去也不知道它是实现什么功能,因此请教大家
#define SWAP_ENDIAN(word)
((BYTE*)&word)[0] ^= ((BYTE*)&word)[1];\\
((BYTE*)&word)[1] ^= ((BYTE*)&word)[0];\\
((BYTE*)&word)[0] ^= ((BYTE*)&word)[1]
它等式两边是数据呢,还是指向字节的指针呢,还有为什么要进行异或呢

最新喜欢:

liuxf66liuxf6...
chnh
驱动小牛
驱动小牛
  • 注册日期2002-04-09
  • 最后登录2004-02-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-05 20:22
有些系统是高位在前,低位在后,但有的系统相反,估计是实现此类功能的
chnh
驱动小牛
驱动小牛
  • 注册日期2002-04-09
  • 最后登录2004-02-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-05 20:20
就是将一个WORD中的两个字节交换,&WORD是WORD的地址,转换成BYTE指针后成了BYTE[2]的数组,自己运算一下应清楚了
usbboy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-03
  • 最后登录2002-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-05 16:40
楼上的老兄说清楚点吧
simonru
驱动牛犊
驱动牛犊
  • 注册日期2002-01-18
  • 最后登录2006-03-22
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-05 16:01
实现的是大小结尾的交换
xieqi1
驱动牛犊
驱动牛犊
  • 注册日期2001-07-31
  • 最后登录2006-02-10
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-05 14:19
我的观点:

将word的高低字节互换(SWAP),(*byte(&word))是取word的值,((BYTE*)&word)[0] 为低8位,((BYTE*)&word)[1]为高8位。根据 等式可得,[0]=[0]^[1];
[1]=[1]^([0]^[1])=[0];
[0]=([0]^[1])^([1]^[0]^[1])=[0]^[1]^[0]=[1];
从而达到互换的目的。此等式的特点是算法较繁,但没有定义额外的RAM保存中间变量。
xieqi1
游客

返回顶部