8265|12

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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


  1.                 temp1=temp&0x8000;
  2.                 if(temp1==0x8000)
  3.                 {
  4.                         d0=1;
  5.                 }
  6.                 else
  7.                 {
  8.                         d0=0;
  9.                 }
复制代码


我目前这样写的,但感觉这样写有点浪费,是不是要用 bit t=temp^16 ?

最新回复

typedef unsigned int  U16 #define BitInqury(nData,nBit) (nData&( (U16)1  详情 回复 发表于 2010-5-28 15:58
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这样可以,只是每个人的习惯不一样而已。用 bit t=temp^16 效果也是一样的。
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
引用 1 楼 iwillgo909 的回复:
这样可以,只是每个人的习惯不一样而已。用 bit t=temp^16 效果也是一样的。


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

比如 if(temp&0x01) 判断第一位是否为1。。。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
  1. int is_bit_set(unsigned int value, int bit)
  2. // 0 <= bit <= 31
  3. {
  4.     return (value & (1<
  5. }
复制代码
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

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

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用楼主 wangfan027 的回复:
我目前这样写的,但感觉这样写有点浪费,是不是要用 bit t=temp^16 ?

局部变量浪费几个字节一点问题都没有,反正函数退出的时候都要释放的。
再说,temp^16 的结果也不是一位呀。对于同一个temp1,位运算&|^的结果的长度都是一样的。
楼主是想用temp^16 来测试第16位吗?  ^不是这么用的,它是按位异或
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
bit是好些
编译器会优化的
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 
bit t=temp & (1<<15);
 
 
 

回复

3

帖子

0

TA的资源

禁止发言

9
 
引用楼主 wangfan027 的回复:
C/C++ code

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


我目前这样写的,但感觉这样写有点浪费,是不是要用 bi……

d0 = (temp & 0x8000) == 0x8000;
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
楼主是不是想说 sbit t=temp^15这样
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 lovewwy 的回复:
楼主是不是想说 sbit t=temp^15这样


对,我是想说能不能直接定义一个指向temp 第15位的位
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 wangfan027 的回复:
引用 9 楼 lovewwy 的回复:
楼主是不是想说 sbit t=temp^15这样


对,我是想说能不能直接定义一个指向temp 第15位的位

51的单片机是可以,但注意必须将temp定义成bdata类型才可以用这种方式
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
typedef unsigned int  U16
#define BitInqury(nData,nBit) (nData&( (U16)1< if(BitInqury(temp,nBit))
{
}
else
{
}
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表