swift3.0无符号右移(类似Java的>>>)

本文详细解释了位运算中的右移操作(>> 和 >>>),包括它们对于正数和负数的不同处理方式,并提供了一个具体的实现示例,帮助读者理解如何手动进行位右移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。

以32位为例,参数:value为十进制数,bit为右移的位数,返回结果是一个32位的整数


private func relizeRight(value:Int32, bit: Int32) ->Int32 {

        

        //将十进制转为二进制

        var caculate =String.init(value, radix:2)

        

        if caculate.characters.first =="-" {

            let index = caculate.index(caculate.startIndex, offsetBy:1)

            caculate = caculate.substring(from: index)

        }

        

        for_ in0..<32-caculate.characters.count {


            caculate = "0"+caculate

        }

        

        //如果是负数位移那么要对二进制数取反然后+1

        if value <0 {

            

            let becomeTwo = caculate.replacingOccurrences(of:"1", with: "2")

            let becomeOne = becomeTwo.replacingOccurrences(of:"0", with: "1")

            caculate = becomeOne.replacingOccurrences(of:"2", with: "0")

            

            if caculate.characters.last =="0" {

                

                let index = caculate.index(caculate.startIndex, offsetBy: caculate.characters.count - 1)

                caculate = caculate.substring(to: index)+ "1"

            }else {

               

                let index = caculate.index(caculate.startIndex, offsetBy: caculate.characters.count - 2)

                caculate = caculate.substring(to: index)+ "10"

            }

        }

        

        for_ in0..<bit {

            caculate = "0"+caculate

        }

        let index = caculate.index(caculate.startIndex, offsetBy:32)

        caculate = caculate.substring(to: index)


        let myResult =Int32.init(caculate, radix:2)

        

        return myResult ??0

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值