简单二进制加法计算器(原创)

简介: 简单二进制加法计算器(原创)

前两天看了b站上狂神的二进制计算教程

动手先写了个二进制加法计算器

通过String和List互转的方式

//String转List
Arrays.asList(str.split(""))
//List转String
String.join("", list)

基本实现二进制加法功能

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * @ClassName: clacdemo
 * @Date: 2020/7/7 0007 21:10
 * @Description:
 * @Author: <achao1441470436@gmail.com>
 */
public class clacdemo {
    public static void main(String[] args) {
        String four = "00000100";
        String five = "00000101";
        System.out.println(sum(four, five));
    }
    /**
     * 加法
     *
     * @param num1
     * @param num2
     * @return
     */
    public static String sum(String num1, String num2) {
        List<String> list = new ArrayList<>();
        //异或
        list.add(xor(num1, num2));
        //与
        list.add(and(num1, num2));
        //如果 与 结果为0
        if (isZero(list.get(list.size() - 1))) {
            //return 异或 的结果
            return list.get(list.size() - 2);
        }
        //从第二步开始,重复计算
        while (true) {
            //进位
            list.add(carry(list.get(list.size() - 1)));
            //异或
            list.add(xor(list.get(list.size() - 3), list.get(list.size() - 1)));
            //与
            list.add(and(list.get(list.size() - 4), list.get(list.size() - 2)));
            //如果 与 结果为0
            if (isZero(list.get(list.size() - 1))) {
                //return 异或 的结果
                return list.get(list.size() - 2);
            }
        }
    }
    /**
     * 异或
     *
     * @param num1
     * @param num2
     * @return
     */
    public static String xor(String num1, String num2) {
        List<String> numList1 = Arrays.asList(num1.split(""));
        List<String> numList2 = Arrays.asList(num2.split(""));
        List<String> result = new ArrayList<>();
        for (int i = 0; i < numList1.size(); i++) {
            //异或 如果两者相等为0 不等为1
            if (numList1.get(i).equals(numList2.get(i))) {
                result.add("0");
            } else {
                result.add("1");
            }
        }
        return String.join("", result);
    }
    /**
     * 与
     *
     * @param num1
     * @param num2
     * @return
     */
    public static String and(String num1, String num2) {
        List<String> numList1 = Arrays.asList(num1.split(""));
        List<String> numList2 = Arrays.asList(num2.split(""));
        List<String> result = new ArrayList<>();
        for (int i = 0; i < numList1.size(); i++) {
            //与 两者为1 结果为1 否则为0
            if ("1".equals(numList1.get(i)) && "1".equals(numList2.get(i))) {
                result.add("1");
            } else {
                result.add("0");
            }
        }
        return String.join("", result);
    }
    /**
     * 判断是否全为0
     *
     * @param num
     * @return
     */
    public static Boolean isZero(String num) {
        List<String> numList = Arrays.asList(num.split(""));
        for (String tempNum : numList) {
            //判断结果是否含1,有则return false
            if ("1".equals(tempNum)) {
                return false;
            }
        }
        return true;
    }
    /**
     * 进位
     *
     * @param num
     * @return
     */
    public static String carry(String num) {
        List<String> numList = Arrays.asList(num.split(""));
        for (int i = 0; i < numList.size(); i++) {
            if ("1".equals(numList.get(i))) {
                try {
                    numList.set(i - 1, "1");
                } catch (ArrayIndexOutOfBoundsException e) {
                    System.out.println("溢出!");
                    System.exit(0);
                }
                numList.set(i, "0");
            }
        }
        return String.join("", numList);
    }
}
相关文章
百叶窗图片切换
在线演示 本地下载
1070 0
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
10天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
355 131
|
10天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
443 131
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
206 138
|
10天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
405 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
4天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
204 136
|
22天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1362 8