请问下判断一个数据的某一位是否为1或者0到底该怎么写?

dceacho 2010-05-26 09:01:41

temp1=temp&0x8000;
if(temp1==0x8000)
{
d0=1;
}
else
{
d0=0;
}


我目前这样写的,但感觉这样写有点浪费,是不是要用 bit t=temp^16 ?
...全文
3681 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovewwy 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangfan027 的回复:]
引用 9 楼 lovewwy 的回复:
楼主是不是想说 sbit t=temp^15这样


对,我是想说能不能直接定义一个指向temp 第15位的位
[/Quote]
51的单片机是可以,但注意必须将temp定义成bdata类型才可以用这种方式
ziye19860507 2010-05-28
  • 打赏
  • 举报
回复
typedef unsigned int U16
#define BitInqury(nData,nBit) (nData&( (U16)1<<nBit )?1:0 )
if(BitInqury(temp,nBit))
{
}
else
{
}
hjf0102 2010-05-27
  • 打赏
  • 举报
回复
bit t=temp & (1<<15);
qzf368 2010-05-27
  • 打赏
  • 举报
回复
bit是好些
编译器会优化的
jiqiang01234 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangfan027 的回复:]
C/C++ code

temp1=temp&0x8000;
if(temp1==0x8000)
{
d0=1;
}
else
{
d0=0;
}


我目前这样写的,但感觉这样写有点浪费,是不是要用 bi……
[/Quote]
d0 = (temp & 0x8000) == 0x8000;
dceacho 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lovewwy 的回复:]
楼主是不是想说 sbit t=temp^15这样
[/Quote]

对,我是想说能不能直接定义一个指向temp 第15位的位
lovewwy 2010-05-27
  • 打赏
  • 举报
回复
楼主是不是想说 sbit t=temp^15这样
brookmill 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangfan027 的回复:]
我目前这样写的,但感觉这样写有点浪费,是不是要用 bit t=temp^16 ?
[/Quote]
局部变量浪费几个字节一点问题都没有,反正函数退出的时候都要释放的。
再说,temp^16 的结果也不是一位呀。对于同一个temp1,位运算&|^的结果的长度都是一样的。
楼主是想用temp^16 来测试第16位吗? ^不是这么用的,它是按位异或
brookmill 2010-05-26
  • 打赏
  • 举报
回复
int is_bit_set(unsigned int value, int bit)
// 0 <= bit <= 31
{
return (value & (1<<bit)) ? 1 : 0;
}
brookmill 2010-05-26
  • 打赏
  • 举报
回复
if(temp&0x8000)
{
d0=1;
}
else
{
d0=0;
}
Peasant_Lee 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iwillgo909 的回复:]
这样可以,只是每个人的习惯不一样而已。用 bit t=temp^16 效果也是一样的。
[/Quote]

不对吧?bit t=temp^16 ?temp与16异或,是什么东西啊?16是0x10。判断某一位是否为1,用位与才是最简单的。。

比如 if(temp&0x01) 判断第一位是否为1。。。
Iwillgo909 2010-05-26
  • 打赏
  • 举报
回复
这样可以,只是每个人的习惯不一样而已。用 bit t=temp^16 效果也是一样的。
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

27,521

社区成员

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

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