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

dceacho 2010-05-26 09:01:41

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


我目前这样写的,但感觉这样写有点浪费,是不是要用 bit t=temp^16 ?
...全文
3478 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 效果也是一样的。

27,375

社区成员

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

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