[CTCI] 5.2 Convert Decimal to Binary

本文介绍了如何将一个包含小数的十进制字符串(如3.72)转换为二进制表示。首先,通过找到小数点位置分离整数和小数部分,然后分别进行转换。对于整数部分,通过与运算判断最低位并逐位右移。对于小数部分,不断乘以2并检查结果是否大于零来确定二进制位。当数值不再大于零时停止转换。文章提供了详细的步骤和代码实现。
摘要由CSDN通过智能技术生成

问题:

Given a (decimal - e.g. 3.72) number that is passed in as a string, print the binary representation.If the number can not be represented accurately in binary, print “ERROR”.

分析:

我们这里暂时不考虑负数的情况,因为如果是负数的话,整数部分需要考虑比如2's complement,比较麻烦。我们就暂时假设都是正数。

好,做了这个假设以后,我们首先需要做的是,分离出整数部分和小数部分。这个很好办,用string.find(“.")和substr即可。分离出来以后,我们使用atoi和atof来把他们转化成int和float。这些简单的工作完成之后,我们要开始进行向二进制的转化了。

先说整数部分。整数部分转发的方法有不止一种,这里介绍一种笔者认为不错的:把这个整数跟1做and操作,如果得到的是1,则证明这个整数的rightmost那一位是1,所以我们加上一个“1”;如果是0,则证明这个整数的rightmost那一位是0,我们加上0即可。然后我们把这个数向右shift一位。

现在说小数部分。小数部分的算法是,不断地乘以二。如果结果是大于零的,则为“1”,然后把大于零的部分去掉即可;如果是小于零的,则为“0”,然后不用做任何事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值