5322|10

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教一个16进制转换成10进制的问题 [复制链接]

也就是我输入的参数是16进制的,比如0x0008 , 我现在要转换成十进制的3
原因是这样的:0x0008是bit[3] = 1, 所以我最后要得到的是第几个bit上=1,因此对我来说,0x0008要最后得到3

依此类推,如果是0x0001,那么结果要转换成0, 如果是0x0002,结果要转换成1,如果是0x0004,结果要转换成2。

哪位高手能给个转换的代码,谢谢了。

最新回复

实际为数学上:求2为底8的对数 不过没有Log函数啊 还是楼上的代码实在  详情 回复 发表于 2009-2-19 15:38
点赞 关注

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
x86系列CPU上可以用汇编指令BSF可以直接得到结果。
例如:
DWORD value = 0x0008;
DWORD result;
__asm bsf eax, value;
__asm mov result, eax;
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我不用汇编,我要用c,我是用的iar
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
比如0x0008 , 我现在要转换成十进制的3
?????这个怎么会这样转换。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
我1楼不是解释了吗? 0x0008是bit[3] = 1,那么我要得到的就是这个3的值,我要知道是哪个bit设置成了1 (只会有一个bit = 1, 不会出现2个以上bit为1的情况)
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
用循环每次右移一位,直到结果为0时,循环次数减1就是你要的结果。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
有什么库函数能直接转换吗?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 5 楼 cnzdgs 的回复:
用循环每次右移一位,直到结果为0时,循环次数减1就是你要的结果。


同意
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
a&(1<<3)
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
随手写个
for(int i=0;i<16;i++){
if((a>>i)&0x1 >0) return i;

}
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
实际为数学上:求2为底8的对数

不过没有Log函数啊 还是楼上的代码实在
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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