先看打印结果在看代码比较好理解。结果在最下面的位置。

总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次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实现二进制的加法的更多相关文章

  1. Java基础-二进制以及字符编码简介

    Java基础-二进制以及字符编码简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必计算机毕业的小伙伴或是从事IT的技术人员都知道数据存储都是以二进制的数字存储到硬盘的.从事开 ...

  2. 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 ...

  3. java基础 二进制补码

    二进制补码: 1.计算机系统的内部以二进制形式存储数据. 2.在Java程序中输入的十进制的数据都会被自动转换为二进制,Java内部也以二进制来进行数值运算,但返回的结果是十进制. 二进制补码的原理: ...

  4. java:判断二进制数据中第n位是否为1

    可以使用位运算来判断. &是位的与运算符,是指二进制数按位“与”的操作, 逻辑与就是两者都为真的时候才为真,其他真假,假真,假假的运算结果都是假.二进制写法如下 1 & 1 = 1 , ...

  5. Java:二进制(原码、反码、补码)与位运算

    一.二进制(原码.反码.补码) 二进制的最高位是符号位(“0”代表正数,“1”代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1.  原码:将一个整数转换成二进制表示 以 int ...

  6. java图片二进制相互转换

    import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOu ...

  7. java中 二进制 八进制 十六进制 十进制 相互转换 最简方法

    package com.swift; import java.util.Scanner; public class Hex2Decimal { public static void main(Stri ...

  8. Java中二进制字节与十六进制互转

    在Java中字节与十六进制的相互转换主要思想有两点: 1.二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0 ...

  9. Java读写二进制数据

    import java.io.*; import java.time.LocalDate; public class Test { public static void main(String[] a ...

随机推荐

  1. jQuery DOM 元素方法(get)

    jQuery DOM 元素方法 1..get() 获得由选择器指定的 DOM 元素. $(selector).get(index)index 可选.规定获取哪个匹配元素(通过 index 编号). 实 ...

  2. 阻塞队列 ArrayBlockingQueue 我给自己挖了一个坑

    说一句MMB, 一下午时间, package cn.tbnb1.seckil.quene; import java.util.concurrent.ArrayBlockingQueue; import ...

  3. 系统盘的消耗 谨慎的日志存储到系统盘+日志级别!! 569 error_log = /usr/local/php7/logs/php-error.log 26 error_log = /usr/local/php7/logs/fpm_error_log

    案例: 系统盘一夜之间骤增近20G nginx + php-fpm cat  /usr/local/nginx/conf/nginx.conf 查看对请求的处理 4个配置文件 /usr/local/n ...

  4. Starting Session of user root.

    Sep 23 01:50:01 d systemd: Started Session 1475 of user root.Sep 23 01:50:01 d systemd: Starting Ses ...

  5. this.$apply()

    chooseVideo(e) { this.fileInfo = {} let that = this wx.chooseVideo({ sourceType: ['album', 'camera'] ...

  6. Python 网络编程——socket

    一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...

  7. git读取配置文件的顺序

    a.查找系统配置文件: /etc/gitconfig 文件,该文件含有系统里每位用户及他们所拥有的仓库的配置值 b.查找用户配置文件:  ~/.gitconfig  文件 或者  ~/.config/ ...

  8. Slyce,这家硅谷创业公司的来头你知道吗

    Slyce,也许你没听过,一家硅谷创业公司,旨在帮助运动员和其他社会名流组织.优化社交媒体,过滤粉丝的声音,让明星更好的在社交媒体上和他们互动.但是如果如果说库里,那你应该就知道了,拿到了上届NBA总 ...

  9. 妙用php中的register_shutdown_function和fastcgi_finish_request

    前言 在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和 ...

  10. HibernateQL

    查询语言---QL(Query Language)   NativeSQL-------功能最强大 HQL--Hibernate QL EJB QL (JP QL)---HQL的一个子集 QBC--- ...