找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2153|回复: 16
收起左侧

C语言8位的数据赋值给一个只有一位的变量时单片机是怎么处理的

[复制链接]
ID:45973 发表于 2024-6-20 10:17 | 显示全部楼层 |阅读模式
请教一个问题:sbit  SDA=P2^1; ..................
unsigned char byte=0xA0 ;..................

SDA=byte &(0x80 >2);
..................
请问这时SDA的值是多少?像这种8位数据赋值给一个只有一位的变量时,单片机是怎么处理的?谢谢!
回复

使用道具 举报

ID:277550 发表于 2024-6-20 12:48 | 显示全部楼层
结果中,第1位是什么。
回复

使用道具 举报

ID:16848 发表于 2024-6-21 08:07 | 显示全部楼层
在程序中试一下就知道了。
回复

使用道具 举报

ID:619259 发表于 2024-6-21 09:26 | 显示全部楼层
程序中SDA=byte &(0x80 >2)   应该是SDA=byte &(0x80 >>2)吧?
回复

使用道具 举报

ID:161164 发表于 2024-6-21 09:47 | 显示全部楼层
假设你没打错
SDA=byte &(0x80 >2);
SDA=0xA0 &(1);
SDA=0;

假设你打错了
正确的是
SDA=byte &(0x80 >>2);
SDA=0xA0 & 0x20;
SDA=0x20;
SDA=1;
回复

使用道具 举报

ID:45973 发表于 2024-6-21 11:08 | 显示全部楼层
cy009 发表于 2024-6-21 09:26
程序中SDA=byte &(0x80 >2)   应该是SDA=byte &(0x80 >>2)吧?

是的,我打错了;
回复

使用道具 举报

ID:45973 发表于 2024-6-21 11:15 | 显示全部楼层
lkc8210 发表于 2024-6-21 09:47
假设你没打错
SDA=byte &(0x80 >2);
SDA=0xA0 &(1);

对的,我打错了,是第二个;但是我有个疑问,1010 0000和0010 0000 与运算后的值是 0010 0000,这个8位的二进制数赋值给一个一位的二进制数(SDA)时,为什么是1?如果这个8位的二进制数是 0101 0000,那SDA此时的值是多少?谢谢!
回复

使用道具 举报

ID:161164 发表于 2024-6-21 13:13 | 显示全部楼层
franklee 发表于 2024-6-21 11:15
对的,我打错了,是第二个;但是我有个疑问,1010 0000和0010 0000 与运算后的值是 0010 0000,这个8位的 ...

非零即1
回复

使用道具 举报

ID:774081 发表于 2024-6-21 14:09 | 显示全部楼层
只要赋给给sda的不是0,sda就是1?
回复

使用道具 举报

ID:45973 发表于 2024-6-21 15:15 | 显示全部楼层

是的,非零即1,但是是由8位数据中的哪位来决定的?
回复

使用道具 举报

ID:45973 发表于 2024-6-21 15:17 | 显示全部楼层
shennognshi 发表于 2024-6-21 14:09
只要赋给给sda的不是0,sda就是1?

是的,不是1就是0,但是1或者0是由什么因素决定的?8位数据中的最高位或者是最低位还是其他的因素?
回复

使用道具 举报

ID:619259 发表于 2024-6-21 18:44 | 显示全部楼层
franklee 发表于 2024-6-21 15:15
是的,非零即1,但是是由8位数据中的哪位来决定的?

按位与,只有两个结果,零(0x00)和非零,非零结果都是1
回复

使用道具 举报

ID:624769 发表于 2024-6-22 20:26 | 显示全部楼层
当把一个 BYTE  赋值给 BIT的时候,其实是做了一个 判断 操作。
相当于,
if(byte != 0x00)  SDA =1;
else   SDA = 0;
回复

使用道具 举报

ID:1109793 发表于 2024-6-23 07:35 | 显示全部楼层
franklee 发表于 2024-6-21 15:17
是的,不是1就是0,但是1或者0是由什么因素决定的?8位数据中的最高位或者是最低位还是其他的因素?

非0 就是只要不是0,都算1了,哪一位都是,不管哪一位为1都使该unsigned char非0
回复

使用道具 举报

ID:401564 发表于 2024-6-24 09:23 | 显示全部楼层
franklee 发表于 2024-6-21 15:17
是的,不是1就是0,但是1或者0是由什么因素决定的?8位数据中的最高位或者是最低位还是其他的因素?

在SDA=byte &(0x80 >2);中
byte &(0x80 >2) 的结果是一个逻辑值:真或者假,也就是1或者0,逻辑值就是一个位,而不是一个数字的1或者是0
回复

使用道具 举报

ID:45973 发表于 2024-6-29 16:45 | 显示全部楼层
谢谢各位的回复,有点明白了,再次感谢!
回复

使用道具 举报

ID:466250 发表于 2024-6-29 17:40 | 显示全部楼层
不规范的写法。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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