先看打印结果在看代码比较好理解。结果在最下面的位置。
总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次3种算法得到2个数相加的结果。二进制应该还有其他算法,由于知识浅薄就不知道了。
代码:
public static void mainString[] args){ int a=11,b=9;//初始化要执行加法的值 System.out.println"===开始二进制运算==="); adda,b); System.out.println"===二进制运算结束==="); } /** * 将二进制的数据打印出来 * @param binars 需要打印的二进制值 * @param paramName 需要打印的参数名称 * @return 返回打印的字符串 */ public static String printBnaryStringBuilder binars,int param){ StringBuilder binarsRe=new StringBuilder); String[] strs=binars.toString).split","); int strLength=strs.length; while strLength>=1){ binarsRe.appendstrs[strLength-1]+" "); strLength--; } return binarsRe.toString); } /** * 十进制转换为二进制输出 * @param a 要转换的十进制数 * @param binars 接收转换后的二进制数据 * @param paramName 需要打印的参数名称 * @return */ public static String DecimalTransBinaryint a,StringBuilder binars,int param){ int rem=a%2;//取余数 int base=a/2;//取基数 /** * 物流是余数和基数都必须除尽为0 */ ifbase>0 || rem>0){ //将所有的余数都添加到字符串中使用,隔开在打印是使用 binars.appendrem+","); DecimalTransBinarybase,binars,param); } //十进制转换二进制成功后,将二进制数据打印出来 return printBnarybinars,param); } /** * 十进制加法,解释如何使用二进制实现的 * @param a 执行加法的参数 * @param b 执行加法的参数 * @return 返回加法成功后的整数 */ public static int addint a,int b){ //对需要相加的数据输出为二进制 StringBuilder binars=new StringBuilder); String aStr=DecimalTransBinarya,binars,a); //将stringBuilder数据输出到控制台 binars.setLength0); String bStr=DecimalTransBinaryb,binars,b); int res=a; //按为异域的二进制运算 int xor=a^b; System.out.println""); System.out.println"按位异域^):二进制数据的相同位不同则为1,相同则为0。"); System.out.printlna+"的二进制值:"+aStr); System.out.printlnb+"的二进制值:"+bStr); System.out.println"参数:"+a+" 参数:"+b+" 进行"+a+"^"+b+":"); binars.setLength0); String xorStr=DecimalTransBinaryxor,binars,xor); System.out.printlnaStr+"^"+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.setLength0); String forwardStr=DecimalTransBinaryforward,binars,forward); System.out.println""+aStr+"&"+bStr+")<<1="+forwardStr); System.out.println"按位与后得到的二进制值:"+forwardStr); System.out.println"按位与后得到的十进制值:"+forward); System.out.println); ifforward!=0){ System.out.print"("+a+"&"+b+")<<1="+forward+"运算结果不为0,"); System.out.println"将"+a+"^"+b+"运算的结果值:"+xor+";("+a+"&"+b+")<<1运算的结果值:"+forward+"。继续重复以上运算。"); res=addxor,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
===二进制运算结束===