二进制求和

当我们要对两个二进制数进行求和时,可以模仿十进制数相加的方法,从最低位开始逐位相加,并且考虑进位的情况。在二进制数中,每一位的可能取值只有0或1,所以我们可以用异或运算(^)来得到对应位的和,用与运算(&)再左移一位来得到进位。然后将这两个结果再相加,直到没有进位为止。

下面是用Python实现的代码:
python 复制代码
def addBinary(a: str, b: str) -> str:
    # 初始化结果字符串和进位
    result = ""
    carry = 0
    
    # 从最低位开始逐位相加
    i, j = len(a) - 1, len(b) - 1
    while i >= 0 or j >= 0 or carry:
        # 获取当前位的数字
        num_a = int(a[i]) if i >= 0 else 0
        num_b = int(b[j]) if j >= 0 else 0
        
        # 计算当前位的和以及进位
        total = num_a ^ num_b ^ carry
        carry = (num_a & num_b) | (num_a & carry) | (num_b & carry)
        
        # 将当前位的结果加到结果字符串的最前面
        result = str(total) + result
        
        # 移动到下一位
        i -= 1
        j -= 1
    
    return result

# 测试代码
a = "1010"
b = "1011"
print(addBinary(a, b))  # 输出:"10101"

在代码中,我们通过一个while循环,从最低位开始逐位相加。在每一位上,我们先用异或运算得到当前位的和,再用与运算结合左移一位得到进位,然后将和与进位相加,得到当前位的最终结果。最后将每一位的结果加到结果字符串的最前面,并且在进位用尽后停止循环。

需要注意的是,我们要处理好两个字符串长度不一致的情况,这里用0来填充缺少的位数。另外,Python的字符串是不可变的,所以在构建结果字符串时,最好使用列表或其他可变的数据结构,然后再转换成字符串。

相关推荐
暗夜猎手-大魔王3 分钟前
转载--Hermes Agent 08 | Agent 的自我进化:nudge、后台审查与轨迹数据
java·前端·人工智能
寺中人8 分钟前
Linux系统超详细解析与零基础实战使用教程
linux·服务器·系统架构·linux命令·零基础教程
宸津-代码粉碎机10 分钟前
Spring AI 企业级RAG实战|增量更新+文档去重+定时自动入库生产落地方案
java·大数据·人工智能·后端·python·spring
Raink老师11 分钟前
【AI面试临阵磨枪-92】Skill 开发规范:命名、文档、测试、日志、监控、告警?
java·面试·log4j
IT_陈寒12 分钟前
Redis集群节点迁移把我坑惨了,这个坑你得提前绕开
前端·人工智能·后端
Android系统攻城狮14 分钟前
Linux Pulseaudio深度解析之pa_stream_set_overflow_callback用流程与实战(三十七)
linux·运维·服务器·音频进阶·pulseaudio进阶
新酱爱学习15 分钟前
手搓 10 个 Skill 踩出来的坑,我做成了一套工程化工具链
前端·人工智能·agent
学无止境_永不停歇18 分钟前
从零手写高性能C++ TCP 服务器框架(十一) --- Connection实现
linux·服务器·网络·c++
weixin_4080996721 分钟前
2026 AI生成图片快速去水印的5种实测方法(附在线工具 + Python/Java/PHP API代码)
java·人工智能·python·api接口·ai去水印·石榴智能·自动去水印