找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2908|回复: 11
收起左侧

关于C语言按位与

  [复制链接]
ID:855539 发表于 2020-12-19 11:54 | 显示全部楼层 |阅读模式
        DSIO = addr & 0x01 ;//数据从低位开始传送
                addr >>= 1;
         和
DSIO = addr  ;//数据从低位开始传送
                addr >>= 1;
    有什么区别
回复

使用道具 举报

ID:235200 发表于 2020-12-19 18:40 | 显示全部楼层
梁美胜 发表于 2020-12-19 16:43
DSIO = addr;怎么判断传给DSIO的值是什么

假设addr=0xff,则addr&0x01=0xff&0x01(即保留0xff最低位)=0x01,其值为1,若addr=0xfe,则addr&0x01=0xfe&0x01(即保留0xfe最低位)=0x00,其值为0
回复

使用道具 举报

ID:235200 发表于 2020-12-19 15:48 | 显示全部楼层
前者保证DSIO上的值是0或1,而后者输出给DSIO的值可能不是0或1,要看DSIO是如何定义的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:855539 发表于 2020-12-19 16:43 | 显示全部楼层
csmyldl 发表于 2020-12-19 15:48
前者保证DSIO上的值是0或1,而后者输出给DSIO的值可能不是0或1,要看DSIO是如何定义的

DSIO = addr;怎么判断传给DSIO的值是什么
回复

使用道具 举报

ID:863521 发表于 2020-12-19 17:13 | 显示全部楼层
可以通过指针来解决
回复

使用道具 举报

ID:382454 发表于 2020-12-19 17:34 | 显示全部楼层
相与的,是零,则一定是0
回复

使用道具 举报

ID:854457 发表于 2020-12-19 19:01 | 显示全部楼层
串口通信经常用到按位与来判断高低电平,要规定高定平即与上0x80或0x01,看你从高位传还是低位传了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:863572 发表于 2020-12-19 19:57 | 显示全部楼层
前者按位传送,后者整个字节传送

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:863572 发表于 2020-12-19 19:58 | 显示全部楼层
csmyldl 发表于 2020-12-19 15:48
前者保证DSIO上的值是0或1,而后者输出给DSIO的值可能不是0或1,要看DSIO是如何定义的

这个说法是最正确的。
回复

使用道具 举报

ID:864028 发表于 2020-12-20 16:35 | 显示全部楼层
前者输出十六进制数addr的最后一位,后者输出addr
回复

使用道具 举报

ID:212797 发表于 2020-12-20 17:07 | 显示全部楼层
DSIO = addr & 0x01表示的是DSIO只取addr的最低位,即 DSIO值必定为0或者1;
DSIO = addr表示的是把addr的整个值给DSIO了,如果DSIO和addr类型相同,DSIO的值等于addr;
回复

使用道具 举报

ID:213173 发表于 2020-12-20 21:40 | 显示全部楼层
梁美胜 发表于 2020-12-19 16:43
DSIO = addr;怎么判断传给DSIO的值是什么

DSIO是位变量,只有0和1两个状态。addr是一个字节变量,数据范围0~255。
DSIO = addr & 0x01 ;是把addr最低位赋值于DSIO。
如果写成DSIO = addr;就会使得addr除0x00以外的任意数都会赋值DSIO为1而出错。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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