Swift-浮点数二进制表示

题目:给定一个介于0和1之间的实数,类型为double,打印它的二进制表示。如果该数字无法精准地用32位以内的二进制表示,则打印“ERROR”.

解法一

数字乘以2,不断将数据不断向左移动,与1比较

核心代码:
<pre><code>` func printBinary(num:Float) -> String {
if num >= 1 && num <= 0 {
return "ERROR"
}

    var number:Float = num
    var binaryString:String = "."
    
    while number > 0 {
        
        if binaryString.characters.count >= 32 {
            return "ERROR"
        }
        
        let temp:Float = number * 2
        
        if temp >= 1 {
            binaryString.append("1")
            number = temp - 1
        } else {
            binaryString.append("0")
            number = temp
        }
    }
    
    return binaryString
}`</code></pre>

解法二

从前到后,不断更新系数除以2

核心代码:
<pre><code>` func printBinary2(num:Float) -> String {

    if num >= 1 && num <= 0 {
        return "ERROR"
    }
    
    var number:Float = num
    var binaryString:String = "."
    var factor:Float = 0.5
    
    while number > 0 {
        if binaryString.characters.count >= 32 {
            return "ERROR"
        }
        
        if number >= factor {
            binaryString.append("1")
            number -= factor
        } else {
            binaryString.append("0")
        }
        
        factor /= 2
        
    }
    
    return binaryString
}`</code></pre>

测试代码:
<pre><code>var bitBinary:String = bitManager.printBinary(num: 0.625) var bitBinary2:String = bitManager.printBinary2(num: 0.625) print("FlyElephant--二进制的表现形式:\(bitBinary)---\(bitBinary2)")</code></pre>

FlyElephant.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容