运算过程中不出现 + - * / 的位运算实现

啊哈今天来做点恶心的事情,现在规定在运算的过程当中,不出现+ - * /等符号,实现位运算.

不使用操作符....嗯....我们马上能联想到把+ - * / 都写成函数不就OK了嘛.但是等一下,我们要做的是位运算唉,我们要操作的是1,0序列将+ - * /都写成函数固然可以,但是杀鸡怎么需要宰牛的刀捏?总所周知,我们的+ - * /都可以用万能的+法来表示 诸如a - b = a + (-b),  a * b = a+a+a......(b个a) 除法就是用被除数不断的减去除数,能减多少次就是商....看到这里可能会有人禁不住想问,你这样减,减到最后减不完怎么办?(相当于有余数,要考虑小数)  No problem因为我们做的是位运算...浮点数不在位运范围内,所以我们大可放心

 

然后也许有人又有问题了,如果只是用加法来实现 + - * / 那你循环调用加法的次数不是很多嘛? 对于这个回答,理论上确实是这样,但是实际上差别并不大,因为即便是long类型我们也只是有64位嘛,而我们操作的数都是二进制,那么那么嗯最坏的时候我们会循环(64-1)*2 = 126次,拿乘法来说,我们用一般的位移相乘的方法,极限情况下运算的次数是63次.那63次 与 126次的这一点差别看起来是一倍,实际上是非常小的而且实现起来很直观不用一下这个左移 那个右移,对于除法也一样,若是用加法来做的话,那么理论上极限情况就是2^63 / 1了 最多循环126次,而用先高位对齐,然后减,然后继续左移右移的方法 是63次

 

根据上面所叙述的,我们完全可用加法实现所有的 + - * /,效率不错而且很直观,又容易理解.下面是代码

 

 

 

 

若有错误欢迎指出哈~~

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值