关于位操作

金笛子 2008-03-05 11:13:33
#define SetBit(VAR,Place) ( VAR |= (1<<Place) )
#define ClrBit(VAR,Place) ( VAR &= ((1<<Place)^255) )
#define ChgBit(VAR,Place) ( VAR ^= (1<<Place) )
#define AffBit(VAR,Place,Value) (( Value) ? ( VAR |= (1<<Place) ) : \
( VAR &= ( (1<<Place)^255) ) )
#define MskBit(Dest,Msk,Src) ( Dest = (Msk & Src) | ((~Msk) & Dest) )
#define ValBit(VAR,Place) ( VAR & (1<<Place) )

#define AREA 0x00
#define BitClr(BIT) ( *((volatile char *) (AREA+BIT/8)) &= (~(1<<(7-BIT%8))) )
#define BitSet(BIT) ( *((volatile char *) (AREA+BIT/8)) |= (1<<(7-BIT%8)) )
#define BitVal(BIT) ( *((volatile char *) (AREA+BIT/8)) & (1<<(7-BIT%8)) )

大家帮忙看看这些宏都是什么意思呀?谢谢
...全文
244 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-03-05
  • 打赏
  • 举报
回复
顺便指出,出现255的地方是不是应该换成
~0或者(-1)呢?
baihacker 2008-03-05
  • 打赏
  • 举报
回复
#define BitClr(BIT) ( *((volatile char *) (AREA+BIT/8)) &= (~(1 < <(7-BIT%8))) )
#define BitSet(BIT) ( *((volatile char *) (AREA+BIT/8)) ¦= (1 < <(7-BIT%8)) )
#define BitVal(BIT) ( *((volatile char *) (AREA+BIT/8)) & (1 < <(7-BIT%8)) )
对于AREA指向的地址分每八位分为一块
对于每一块中,对于第7-BIT%8位
分别把这位
清零
设置为1
计算这一位的值(即2的多少次方)
dang800919 2008-03-05
  • 打赏
  • 举报
回复
VALBIT需要2个参数
然后 第2个参数 左移1位 与第1个参数做 与 运算
把PLACE 最后一位 置成0
baihacker 2008-03-05
  • 打赏
  • 举报
回复
#define MskBit(Dest,Msk,Src) ( Dest = (Msk & Src) ¦ ((~Msk) & Dest) )
设置Msk
#define ValBit(VAR,Place) ( VAR & (1 < <Place) )
第Place位为1则返回2^Place
Supper_Jerry 2008-03-05
  • 打赏
  • 举报
回复
#define SetBit(VAR,Place) ( VAR ¦= (1 < <Place) ) 把var中place位设置为1
#define ClrBit(VAR,Place) ( VAR &= ((1 < <Place)^255) ) 把var中place位设置为0
#define ChgBit(VAR,Place) ( VAR ^= (1 < <Place) ) 把var中place位原来是1变为0,0变为1
#define AffBit(VAR,Place,Value) (( Value) ? ( VAR ¦= (1 < <Place) ) : \
( VAR &= ( (1 < <Place)^255) ) )
value如果大于0就把var中的place位设置为1否则var中的place位设置为0
baihacker 2008-03-05
  • 打赏
  • 举报
回复
先mark一下
  • 打赏
  • 举报
回复
看英文,翻译成中文就是功能
babyvox1999 2008-03-05
  • 打赏
  • 举报
回复
ChgBit(VAR,Place) 把var的第place位取反
AffBit(VAR,Place,Value) 根据value的值来选择执行SetBit(VAR,Place)或者ClrBit(VAR,Place)
等楼下的继续
babyvox1999 2008-03-05
  • 打赏
  • 举报
回复
SetBit(VAR,Place) 把var的第place位置为1
ClrBit(VAR,Place) 把var的第place位清0
taodm 2008-03-05
  • 打赏
  • 举报
回复
找本C语言的书,看一下"位操作"
NKLoveRene 2008-03-05
  • 打赏
  • 举报
回复
看起来的确应该是图像方面的处理函数了
ryfdizuo 2008-03-05
  • 打赏
  • 举报
回复
根据名字判断吧,估计都是像素处理方面的宏定义,为了提高速度...
yangb2014# 2008-03-05
  • 打赏
  • 举报
回复
找本C语言的书,看一下"位操作"
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-05 11:13
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下