首页
社区
课程
招聘
[求助]C语言中,编写按位运算宏遇到的一点疑问!求解答
发表于: 2018-4-30 11:23 2825

[求助]C语言中,编写按位运算宏遇到的一点疑问!求解答

2018-4-30 11:23
2825
不多说 上代码
#define setbit(x,y) x|=(1<<y)    对X的第Y位置1
#define clrbit(x,y) x&=!(1<<y)    对X的第Y位置0


测试数字 X=88  二进制补码后是   0000 0000  0101 1000

使用   #define setbit(x,3) x|=(1<<3)    对X的第3位置1 后 应该不变才对
可是按Int打印出来却是0

这是为何呢?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2018-4-30 11:41
0
雪    币: 6553
活跃值: (3918)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不好意识,之前看错了以为第1和2楼都是楼主发的。
最后于 2018-4-30 20:12 被厉害了我的谁编辑 ,原因:
2018-4-30 13:55
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
有个宏  SetFlag
2018-4-30 18:21
0
雪    币: 20
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
小艾 有个宏 SetFlag
没找到这个。。。。麻烦给个出处好吗
2018-4-30 20:24
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
6
2楼不是帮你测试了setbit了吗,没有问题的。但是你的clrbit有问题,非运算应该用~,是按位取反,而不是!,逻辑非。
另外,SetFlag/ClearFlag应该是在驱动开发中有的宏,我只在驱动中用过,应用层又没有就不知道了
最后于 2018-5-1 12:41 被zplusplus编辑 ,原因:
2018-5-1 12:34
0
雪    币: 12
活跃值: (132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
zplusplus 2楼不是帮你测试了setbit了吗,没有问题的。但是你的clrbit有问题,非运算应该用~,是按位取反,而不是!,逻辑非。另外,SetFlag/ClearFlag应该是在驱动开发中有的宏,我只在驱动中 ...
好的
那clrbit  应该是  clrbit(x,y)  x&=~(1<<y)      这样?
2018-5-1 15:52
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8

//
//    These  macros  are  used  to  test,  set  and  clear  flags  respectivly
//

#ifndef  FlagOn
#define  FlagOn(_F,_SF)                ((_F)  &  (_SF))
#endif

#ifndef  BooleanFlagOn
#define  BooleanFlagOn(F,SF)      ((BOOLEAN)(((F)  &  (SF))  !=  0))
#endif

#ifndef  SetFlag
#define  SetFlag(_F,_SF)              ((_F)  |=  (_SF))
#endif

#ifndef  ClearFlag
#define  ClearFlag(_F,_SF)          ((_F)  &=  ~(_SF))
#endif
2018-5-5 19:04
0
游客
登录 | 注册 方可回帖
返回
//