单片机

weicheichei 2011-06-29 10:08:14
sbit secModA = P2^4;
sbit secModB = P2^5;
sbit secModC = P2^6;
sbit secModD = P2^7;

secModA = mod & 0x01;
secModB = mod & 0x02;
secModC = mod & 0x04;
secModD = mod & 0x08;


假如mod=10,会不会secModD=1,secModC=0,secModB=1,secModA=0,这几个口都是输出,谢谢大家了。
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-07-03
  • 打赏
  • 举报
回复
位运算,也叫按位运算,其操作数是 integral,结果也是操作数的类型,运算过程是 按相应的位进行的,没有所谓进位借位,结果也放在相应的位上

例如 secModA = mod & 0x01; 其结果是 0000000x, x 取决于 mod 的第 0 位

逻辑运算结果只有 0 和1,也叫 true 和 false
Great_Bug 2011-07-03
  • 打赏
  • 举报
回复
secModA = mod & 0x01;
secModB = mod & 0x02;
secModC = mod & 0x04;
secModD = mod & 0x08;
============================
这几个可能会有问题。。。结果很可能不是你想要的。
猜想你的mod该是个 int 或 char 类型,它和一个int进行逻辑运算,会得到一个int类型的结果
把这个值传给一个一位宽的变量,通常会传bit-0,那样的话,只有这一行
secModA = mod & 0x01;
可能会是你想要的结果,其它的可能不是。
qq15096068040 2011-07-02
  • 打赏
  • 举报
回复
你为什么要这么做啊
直接赋值啊
xujianglun 2011-06-29
  • 打赏
  • 举报
回复
这就是一个逻辑运算问题
10=0x0A=0000 1010&0x01=0x00
lbing7 2011-06-29
  • 打赏
  • 举报
回复
这个叫位运算,不是逻辑运算

位变量是这样,当你给一个非0值赋给它之后,它就被置1

反之,它则为0
weicheichei 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xujianglun 的回复:]
这就是一个逻辑运算问题
10=0x0A=0000 1010&0x01=0x00
[/Quote]

secModB = mod & 0x02=0000 1010 & 0x02=0000 0010;这个对吗,还有secModB是位定义,这个以后到底是1还是0?谢谢你啊

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧