package org.noneorone.lang.number;
/**
* Title: JavaTech
* Description: 进制转换小例
* Copyright: Copyright (c) 2012
* Create DateTime: Apr 11, 2012 2:51:22 PM
* @author sunnysolong
*/
public class BinaryConversion {
/**
* 十进制转二进制处理
* @param decimal
* @return
*/
private static StringBuilder decimalToBinary(int decimal){
StringBuilder sb = new StringBuilder();
decimalToBinary(decimal, sb);
sb = sb.reverse();
if(sb.indexOf("0") == 0){
sb.deleteCharAt(0);
}
return sb;
}
/**
* 十进制转二进制
* @param decimal
* @param sb
* @return
*/
private static StringBuilder decimalToBinary(int decimal, StringBuilder sb){
//商和余数
int quotient = 0, remainder = 0;
remainder = decimal - decimal / 2 * 2;
quotient = (decimal - remainder) / 2;
//System.out.println(decimal + " / 2 = " + quotient + " ... " + remainder);
if(quotient > 1){
sb.append(remainder);
decimalToBinary(quotient, sb);
}else{
sb.append(remainder);
sb.append(quotient);
}
return sb;
}
public static void main(String[] args) {
System.out.println(decimalToBinary(23) + "---" + decimalToBinary(61) + "---" + decimalToBinary(42));;
System.out.println( 61|23); // 10111 | 111101 对整型参数逐位执行布尔OR操作,如果其中一个运算数中相应的位数为1或者两者都为1,则结果中的这一位为1
System.out.println( 61&23); // 10111 & 111101 对整型参数逐位执行布尔AND操作,只有两个运算数中相应的位数都为1,结果中的这一位方可为1
System.out.println( 61^23); // 10111 ^ 111101 对整型参数逐位执行布尔异或操作,异或是指第一个运算数是true,或者第二个运算数是true,但是两者不能同时为true.如果两个运算数中只有一个数的相应位为1(但不能同时为1),那么结果中的这一位就为1。
//总结:a | b = a & b + a ^ b;
}
}