一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1313|回复: 12
收起左侧

[avr] 请大家帮我看看这段两行的代码哪错了?

[复制链接]
发表于 2014-11-8 21:56 | 显示全部楼层 |阅读模式
void setbit(unsigned char m,unsigned char n,unsigned char l)   //设置m的第n位
{
   if(l==0)
   {
    m = m&(~(0b00000001<<n));
   }
   else
   {
    m = m|(0b00000001<<n);
   };
}


程序如上,我期待的作用是把一个8位字长的char类型变量的某一位置0或1,可是在程序中它为什么不起作用?求教

 楼主| 发表于 2014-11-8 22:14 | 显示全部楼层
知道错那了,丢人

点评

没返回吧  发表于 2014-11-8 22:25
想听听你认为是哪里错了。  发表于 2014-11-8 22:22
 楼主| 发表于 2014-11-8 22:30 | 显示全部楼层
如楼上所说,没返回
发表于 2014-11-8 23:55 | 显示全部楼层
参数没返回
发表于 2014-11-9 00:18 | 显示全部楼层
#define        ClrBit(var,bits)        ((var)&=(~(1<<(bits))))        //清除位
#define        GetBit(var,bits)        ((var)&((1<<(bits))))        //测试位
#define        PclBit(var,bits)        ((var)^=((1<<bits)))        //位取反
发表于 2014-11-9 07:51 | 显示全部楼层
同意楼上,用宏定义
发表于 2014-11-9 09:09 | 显示全部楼层
用宏多简单,这样写有点蛋蛋的忧伤!~

点评

楼主是把两个宏合成一个函数,再说5楼的宏和楼主的函数并不能对应。  发表于 2014-11-9 22:53
发表于 2014-11-10 14:18 | 显示全部楼层
unsigned char m 按值传递,当然不会改变原始m值。要么加返回值,要么m按地址传递
 楼主| 发表于 2014-11-10 16:05 | 显示全部楼层
嗯,已改用宏
发表于 2014-11-10 16:31 | 显示全部楼层
这东西,技巧固然重要,但有的时候技巧会搞得让人头大。反正我就几乎没啥技巧,老老实实地一步一步写,能达到目的就行,为的是以后我还看得明白,还能修改

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-10 05:11 , Processed in 0.065211 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表