找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 973|回复: 16
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:45973 发表于 2024-6-20 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一个问题:sbit  SDA=P2^1; ..................
unsigned char byte=0xA0 ;..................

SDA=byte &(0x80 >2);
..................
请问这时SDA的值是多少?像这种8位数据赋值给一个只有一位的变量时,单片机是怎么处理的?谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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)吧?
回复

使用道具 举报

5#
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;
回复

使用道具 举报

6#
ID:45973 发表于 2024-6-21 11:08 | 只看该作者
cy009 发表于 2024-6-21 09:26
程序中SDA=byte &(0x80 >2)   应该是SDA=byte &(0x80 >>2)吧?

是的,我打错了;
回复

使用道具 举报

7#
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此时的值是多少?谢谢!
回复

使用道具 举报

8#
ID:161164 发表于 2024-6-21 13:13 | 只看该作者
franklee 发表于 2024-6-21 11:15
对的,我打错了,是第二个;但是我有个疑问,1010 0000和0010 0000 与运算后的值是 0010 0000,这个8位的 ...

非零即1
回复

使用道具 举报

9#
ID:774081 发表于 2024-6-21 14:09 | 只看该作者
只要赋给给sda的不是0,sda就是1?
回复

使用道具 举报

10#
ID:45973 发表于 2024-6-21 15:15 | 只看该作者

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

使用道具 举报

11#
ID:45973 发表于 2024-6-21 15:17 | 只看该作者
shennognshi 发表于 2024-6-21 14:09
只要赋给给sda的不是0,sda就是1?

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

使用道具 举报

12#
ID:619259 发表于 2024-6-21 18:44 | 只看该作者
franklee 发表于 2024-6-21 15:15
是的,非零即1,但是是由8位数据中的哪位来决定的?

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

使用道具 举报

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

使用道具 举报

14#
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
回复

使用道具 举报

15#
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
回复

使用道具 举报

16#
ID:45973 发表于 2024-6-29 16:45 | 只看该作者
谢谢各位的回复,有点明白了,再次感谢!
回复

使用道具 举报

17#
ID:466250 发表于 2024-6-29 17:40 | 只看该作者
不规范的写法。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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