打印
[C语言]

io赋值使用与等于和或等于有什么好处?

[复制链接]
2625|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
impig33|  楼主 | 2017-11-28 13:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
dalarang| | 2017-11-28 13:51 | 只看该作者
A |= 1  是 A = A |1 的简化写法

使用特权

评论回复
板凳
mcu5i51| | 2017-11-28 14:45 | 只看该作者
因为很多的时候一个IO可以不只一个用处,用“&” “|“之类的只修改其中的一部分;
比如一个8位IO有2个LED接0,1口,另6个其它的外围元件,操作位0可以操作LED0;就可以用Px &= ~1;来关闭(或点亮)这个LED,其它的没有影响;

使用特权

评论回复
地板
gujiamao12345| | 2017-11-28 15:47 | 只看该作者
位操作呀!

使用特权

评论回复
5
impig33|  楼主 | 2017-11-28 17:50 | 只看该作者
dalarang 发表于 2017-11-28 13:51
A |= 1  是 A = A |1 的简化写法

对,我知道是位操作,我的意思是直接=就可以了,用位操作有什么好处呢?

使用特权

评论回复
6
dalarang| | 2017-11-28 18:13 | 只看该作者
impig33 发表于 2017-11-28 17:50
对,我知道是位操作,我的意思是直接=就可以了,用位操作有什么好处呢? ...

|=可以在不影响其它位的情况下单独对某一位置1
假设现在有个变量A的值是0x80
A=1和A|=1得到的结果是不同的

使用特权

评论回复
7
datouyuan| | 2017-11-29 11:22 | 只看该作者
本帖最后由 datouyuan 于 2017-11-29 11:40 编辑

假如执行指令前P1为1100 1100(实际P1状态不知道,也不需要知道)
P1=1;   //P1将为0000 0001
P1|=1;  //P1将为1100 1101,只让某几位为1,其它位不变。
P1&=1; //P1将为0000 0000,只让某几位为0,其它位不变。

2、3楼已经说得很明白了。就是位操作,位操作的作用是操作你指定的位,你不指定的位不操作。

l楼主明白了吗?

使用特权

评论回复
8
impig33|  楼主 | 2017-11-29 16:21 | 只看该作者
datouyuan 发表于 2017-11-29 11:22
假如执行指令前P1为1100 1100(实际P1状态不知道,也不需要知道)
P1=1;   //P1将为0000 0001
P1|=1;  //P1 ...

看懂了,谢谢答主。

另一个问题,P1=1,这个赋值进去的1是二进制、十进制、还是16进制?

使用特权

评论回复
9
impig33|  楼主 | 2017-11-29 16:23 | 只看该作者
mcu5i51 发表于 2017-11-28 14:45
因为很多的时候一个IO可以不只一个用处,用“&” “|“之类的只修改其中的一部分;
比如一个8位IO有2个LED ...

这个看的有点迷糊,能否写个具体的二进制数,再讲下过程,谢谢

使用特权

评论回复
10
datouyuan| | 2017-11-29 16:24 | 只看该作者
impig33 发表于 2017-11-29 16:21
看懂了,谢谢答主。

另一个问题,P1=1,这个赋值进去的1是二进制、十进制、还是16进制? ...

P1=1的1是十进制的。

使用特权

评论回复
11
datouyuan| | 2017-11-29 16:44 | 只看该作者
impig33 发表于 2017-11-29 16:21
看懂了,谢谢答主。

另一个问题,P1=1,这个赋值进去的1是二进制、十进制、还是16进制? ...


我知道10进制和16进制的表达方式,2进制从没用过,不太确定。
刚查了下。

使用特权

评论回复
12
datouyuan| | 2017-11-29 16:55 | 只看该作者
本帖最后由 datouyuan 于 2017-11-29 17:02 编辑

假如执行指令前P1为1100 1100(实际P1状态不知道,也不需要知道)
P1=1000$0001y;    //P1将为1000 0001
P1|=1000$0001y;   //P1将为1100 1101(1xxx xxx1),只让某几位为1,其它位不变。
P1&=1000$0001y;  //P1将为1000 0000(x000 000x),只让某几位为0,其它位不变。
x表示不变。

使用特权

评论回复
13
肥羊| | 2017-11-29 16:56 | 只看该作者
因为能够改变特定的位置啊

使用特权

评论回复
14
宇容创行| | 2017-11-29 17:19 | 只看该作者
对于支持的寄存器,编译器会优化成位操作指令

使用特权

评论回复
15
地瓜patch| | 2017-11-29 21:18 | 只看该作者
位操作只对该io进行操作,不影响其他io现有状态。用“=”得扒拉同一字节其他io的状态

使用特权

评论回复
16
impig33|  楼主 | 2017-11-30 19:07 | 只看该作者
地瓜patch 发表于 2017-11-29 21:18
位操作只对该io进行操作,不影响其他io现有状态。用“=”得扒拉同一字节其他io的状态 ...

什么时候用与等于,什么时候用或等于呢?

使用特权

评论回复
17
impig33|  楼主 | 2017-11-30 19:10 | 只看该作者
datouyuan 发表于 2017-11-29 16:55
假如执行指令前P1为1100 1100(实际P1状态不知道,也不需要知道)
P1=1000$0001y;    //P1将为1000 0001
P1 ...

是不是给某io赋值1用或等于,赋值0用与等于?

使用特权

评论回复
18
地瓜patch| | 2017-11-30 20:37 | 只看该作者
impig33 发表于 2017-11-30 19:07
什么时候用与等于,什么时候用或等于呢?

io输出1用或1,io输出0用与0

使用特权

评论回复
19
caijie001| | 2017-12-1 00:53 | 只看该作者
本帖最后由 caijie001 于 2017-12-1 00:57 编辑

多学习下C语言,这些操作不止只是赋值啊
比如你只需要改变一组io的某个引脚,其他引脚不变,
那就  PA |= 0X01   这样,就只改变PA0置1,
  PA &= 0Xfe     就只改变PA0置0

使用特权

评论回复
20
impig33|  楼主 | 2017-12-1 13:01 | 只看该作者
地瓜patch 发表于 2017-11-30 20:37
io输出1用或1,io输出0用与0

是输入吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

67

帖子

0

粉丝