java实现二进制的加法
先看打印结果在看代码比较好理解。结果在最下面的位置。
总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次3种算法得到2个数相加的结果。二进制应该还有其他算法,由于知识浅薄就不知道了。
代码:
 public static void main(String[] args){
        int a=11,b=9;//初始化要执行加法的值
        System.out.println("===开始二进制运算===");
       add(a,b);
        System.out.println("===二进制运算结束===");
    }
    /**
     * 将二进制的数据打印出来
     * @param binars 需要打印的二进制值
     * @param paramName 需要打印的参数名称
     * @return 返回打印的字符串
     */
    public  static String printBnary(StringBuilder binars,int param){
        StringBuilder binarsRe=new StringBuilder();
        String[] strs=binars.toString().split(",");
        int strLength=strs.length;
        while (strLength>=1){
            binarsRe.append(strs[strLength-1]+" ");
            strLength--;
        }
        return binarsRe.toString();
    }
    /**
     * 十进制转换为二进制输出
     * @param a 要转换的十进制数
     * @param binars 接收转换后的二进制数据
     * @param paramName 需要打印的参数名称
     * @return
     */
    public static  String DecimalTransBinary(int a,StringBuilder binars,int param){
        int rem=a%2;//取余数
        int base=a/2;//取基数
        /**
         * 物流是余数和基数都必须除尽为0
         */
        if(base>0 || rem>0){
            //将所有的余数都添加到字符串中使用,隔开在打印是使用
           binars.append(rem+",");
            DecimalTransBinary(base,binars,param);
         }
            //十进制转换二进制成功后,将二进制数据打印出来
            return printBnary(binars,param);
    }
    /**
     * 十进制加法,解释如何使用二进制实现的
     * @param a 执行加法的参数
     * @param b 执行加法的参数
     * @return 返回加法成功后的整数
     */
    public static  int add(int a,int b){
        //对需要相加的数据输出为二进制
        StringBuilder binars=new StringBuilder();
        String aStr=DecimalTransBinary(a,binars,a);
        //将stringBuilder数据输出到控制台
        binars.setLength(0);
        String bStr=DecimalTransBinary(b,binars,b);
        int res=a;
        //按为异域的二进制运算
        int xor=a^b;
        System.out.println("");
        System.out.println("按位异域(^):二进制数据的相同位不同则为1,相同则为0。");
        System.out.println(a+"的二进制值:"+aStr);
        System.out.println(b+"的二进制值:"+bStr);
        System.out.println("参数:"+a+" 参数:"+b+"  进行"+a+"^"+b+":");
        binars.setLength(0);
        String xorStr=DecimalTransBinary(xor,binars,xor);
        System.out.println(aStr+"^"+bStr+"="+xorStr);
        System.out.println("按位异域后得到的二进制值:"+xorStr);
        System.out.println("按位异域后得到的十进制值:"+xor);
        //按位与的二进制运算和左移一位的值
        int forward=(a&b)<<1;
        System.out.println();
        System.out.println("按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。");
        System.out.println("左移(<<):二进制数据左移b为(在后面添加b个0)。例如:11<<1。11的二进制为1011,左移1为就是10110;");
        System.out.println("10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。");
        System.out.println("参数:"+a+" 参数:"+b+"  进行("+a+"&"+b+")<<1:");
        binars.setLength(0);
        String forwardStr=DecimalTransBinary(forward,binars,forward);
        System.out.println("("+aStr+"&"+bStr+")<<1="+forwardStr);
        System.out.println("按位与后得到的二进制值:"+forwardStr);
        System.out.println("按位与后得到的十进制值:"+forward);
        System.out.println();
        if(forward!=0){
            System.out.print("("+a+"&"+b+")<<1="+forward+"运算结果不为0,");
            System.out.println("将"+a+"^"+b+"运算的结果值:"+xor+";("+a+"&"+b+")<<1运算的结果值:"+forward+"。继续重复以上运算。");
             res=add(xor,forward);
        }else{
            System.out.println("("+a+"&"+b+")<<1="+forward+"运算结果为0;"+a+"^"+b+"按位异域的运算结果就是最终的和:"+xor);
            res=xor;
        }
        return  res;
    }
结果:
===开始二进制运算===
按位异域(^):二进制数据的相同位不同则为1,相同则为0。
11的二进制值:1 0 1 1
9的二进制值:1 0 0 1
参数:11 参数:9 进行11^9:
1 0 1 1 ^1 0 0 1 =1 0
按位异域后得到的二进制值:1 0
按位异域后得到的十进制值:2
按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。
左移(<<):二进制数据左移b为(在后面添加b个0)。例如:11<<1。11的二进制为1011,左移1为就是10110;
10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。
参数:11 参数:9 进行(11&9)<<1:
(1 0 1 1 &1 0 0 1 )<<1=1 0 0 1 0
按位与后得到的二进制值:1 0 0 1 0
按位与后得到的十进制值:18
(11&9)<<1=18运算结果不为0,将11^9运算的结果值:2;(11&9)<<1运算的结果值:18。继续重复以上运算。
按位异域(^):二进制数据的相同位不同则为1,相同则为0。
2的二进制值:1 0
18的二进制值:1 0 0 1 0
参数:2 参数:18 进行2^18:
1 0 ^1 0 0 1 0 =1 0 0 0 0
按位异域后得到的二进制值:1 0 0 0 0
按位异域后得到的十进制值:16
按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。
左移(<<):二进制数据左移b为(在后面添加b个0)。例如:11<<1。11的二进制为1011,左移1为就是10110;
10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。
参数:2 参数:18 进行(2&18)<<1:
(1 0 &1 0 0 1 0 )<<1=1 0 0
按位与后得到的二进制值:1 0 0
按位与后得到的十进制值:4
(2&18)<<1=4运算结果不为0,将2^18运算的结果值:16;(2&18)<<1运算的结果值:4。继续重复以上运算。
按位异域(^):二进制数据的相同位不同则为1,相同则为0。
16的二进制值:1 0 0 0 0
4的二进制值:1 0 0
参数:16 参数:4 进行16^4:
1 0 0 0 0 ^1 0 0 =1 0 1 0 0
按位异域后得到的二进制值:1 0 1 0 0
按位异域后得到的十进制值:20
按位与(&):二进制数据的相同位都为1则为1,若有一个不为1则为0。
左移(<<):二进制数据左移b为(在后面添加b个0)。例如:11<<1。11的二进制为1011,左移1为就是10110;
10110转换为十进制就是:22。左移用十进制解释就是,11乘以2的1次方的结果。11<<2就是11乘以2的次方的结果。
参数:16 参数:4 进行(16&4)<<1:
(1 0 0 0 0 &1 0 0 )<<1=
按位与后得到的二进制值:
按位与后得到的十进制值:0
(16&4)<<1=0运算结果为0;16^4按位异域的运算结果就是最终的和:20
===二进制运算结束===
java实现二进制的加法的更多相关文章
- Java基础-二进制以及字符编码简介
		Java基础-二进制以及字符编码简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必计算机毕业的小伙伴或是从事IT的技术人员都知道数据存储都是以二进制的数字存储到硬盘的.从事开 ... 
- java 位运算符 以及加法 交换两个变量值
		先给出十转二的除法 2 60 30 0 15 0 7 1 3 1 1 1 0 1 60转二 111100 再介绍位运算符 a=60 b=13 A = 0011 1100 B ... 
- java基础 二进制补码
		二进制补码: 1.计算机系统的内部以二进制形式存储数据. 2.在Java程序中输入的十进制的数据都会被自动转换为二进制,Java内部也以二进制来进行数值运算,但返回的结果是十进制. 二进制补码的原理: ... 
- java:判断二进制数据中第n位是否为1
		可以使用位运算来判断. &是位的与运算符,是指二进制数按位“与”的操作, 逻辑与就是两者都为真的时候才为真,其他真假,假真,假假的运算结果都是假.二进制写法如下 1 & 1 = 1 , ... 
- Java:二进制(原码、反码、补码)与位运算
		一.二进制(原码.反码.补码) 二进制的最高位是符号位(“0”代表正数,“1”代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1. 原码:将一个整数转换成二进制表示 以 int ... 
- java图片二进制相互转换
		import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOu ... 
- java中 二进制 八进制 十六进制 十进制 相互转换 最简方法
		package com.swift; import java.util.Scanner; public class Hex2Decimal { public static void main(Stri ... 
- Java中二进制字节与十六进制互转
		在Java中字节与十六进制的相互转换主要思想有两点: 1.二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0 ... 
- Java读写二进制数据
		import java.io.*; import java.time.LocalDate; public class Test { public static void main(String[] a ... 
随机推荐
- oracle中如何判断某个日期是星期几
			SELECT to_char(to_date('2011-03-13','YYYY-MM-DD'),'d') FROM DUAL 其中 红色部分为传入日期 to_char的其他用法 Select to ... 
- ASP.NET通过代码给TextBox添加事件(点击显示日历)
			private void BindDate() { tbApplyStartDate.Attributes.Add("onclick", "new Calendar(). ... 
- JSTL 标签库
			1. JSTL 概述 JSTL 是 apache 对 EL 表达式的扩展, JSTL 是标签语言! 需要导入 jstl-1.2.jar 包 2. JSTL 标签库 core: 核心标签库; fmt: ... 
- element-UI ,Table组件实现拖拽效果
			拖拽效果,先放效果图,步骤放在后面~~ 一.引入三方插件 1.引入sortable.js的包: npm install sortable.js --save 2.或者npm i -S vuedragg ... 
- 前端基础 DOM & BOM
			推荐阅读:http://www.cnblogs.com/yuanchenqi/articles/6893904.html#_label3 BOM对象 window 对象 所有浏览器都支持 window ... 
- openssl之EVP系列之7---信息摘要算法结构概述
			openssl之EVP系列之7---信息摘要算法结构概述 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成 (作者:Dragon ... 
- 常用mongo语句
			只列出指定字段db.getCollection('PUBLICACCOUNTS').find({},{NickName:1,UserName:1,FID:1,_id:0})获取微信公众号列表db.ge ... 
- springboot 项目跨域问题  CORS
			package com.example.demo.cors; import org.springframework.context.annotation.Bean; import org.spring ... 
- 4.3 使用STM32控制MC20进行GPRS通讯
			需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ... 
- python2.7升级到python3.6注意事项
			python3.6下载地址:https://www.python.org/downloads/source/ 1.安装依赖包:gcc openssl-devel.zlib-devel.readli ... 
