二进制加法

群里有人发:

public static boolean[] BiAdd(boolean[] A, boolean[] B) {
2 boolean[] mResult = null;
3 int i;
4 boolean mAcc = false;
5 if (A.length != B.length) {
6 return null;
7 }
8 mResult = new boolean[A.length + 1];
9 for (i = mResult.length - 1; i > 0; --i) { //******
10 mResult[i] = B[i - 1] ^ mAcc;
11 if (A[i - 1]) {
12 mResult[i] = !mResult[i];
13 mAcc = B[i - 1] | mAcc;
14 } else {
15 mAcc = B[i - 1] & mAcc;
16 }
17 }
18 mResult[0] = mAcc;
19 return mResult;
20 }

是一个二进制的加法运算,他想把for内部的代码简化。

我倒是想了,可惜不知道还有更好,不过让我自己写吧,我就写了下面这样一个:

function bi_add($A, $B){
//adjust the length of two binary array
($a_len = count($A)) > ($b_len = count($B)) ? ($B = array_pad($B, -$a_len, 0)) : ($A = array_pad($A, -$b_len, 0));
$C = array_fill(0, count($A) + 1, 0);
for($i = count($C) - 1; $i > 0 ; $i--){
$tmp = 2 - ($C[$i] + $A[$i - 1] + $B[$i - 1]);
if($tmp <= 0){//if has carry
$C[$i - 1] = 1;
}
$C[$i] = abs($tmp) % 2;//get 0 or 1
}
return $C;
}
$A = array(1,1);
$B = array(0,1,0,1);
echo implode("", $A)."<br />";
echo implode("", $B)."<br />";
echo implode("", bi_add($A, $B))."<br />";

倒是发到了群里,一个名叫“佳南”人开话了,说“这种没有IQ的代码就别贴出来了”,是啊,弱暴了的代码,那我虚心求教啊,求一个化简代码,结果当然无答。发现这世上高手真是多!多得只会鄙视,不会解答。我当然承认自己非主流的代码,比起什么纯逻辑操作看起来,要“没技术含量”得多,哎,也是感叹

转载于:https://www.cnblogs.com/ppoo24/archive/2011/07/18/2109204.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值