java 二进制加法运算_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("左移(<

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。

左移(<

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。

左移(<

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。

左移(<

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

===二进制运算结束===

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值