黑马程序员技术交流社区
标题:
10进制转2/8/16进制练习
[打印本页]
作者:
niuapp
时间:
2015-5-19 11:41
标题:
10进制转2/8/16进制练习
/*
目标:练习位运算符
方法:10进制转2、16、8进制
*/
import java.util.Scanner;
class JinZhi10 {
public static void main(String[] args) {
//StringBuffer sb = new StringBuffer();
Scanner sc = new Scanner(System.in);
System.out.println("输入一个需要转换的十进制整数");
int x = sc.nextInt();
System.out.println("二进制:"+to2(x).reverse());
System.out.println("十六进制:"+to16(x).reverse());
System.out.println("八进制:"+to8(x).reverse());
}
//转2进制
public static StringBuffer to2(int x){
StringBuffer sb = new StringBuffer();
// while(x>0){ //
// sb.append(x%2); //先对2取余,存起来
// x = x/2; //然后x除2,继续判断,直到x=0
// }
if(x==0){
sb.append(0);
}else{
while(x!=0){ //这个方法更好
sb.append(x&1);
x = x>>>1;
}
}
// for(int c=0; c<32; c++){
// sb.append(x&1);
// x = x>>1;
// }
return sb;
}
//转16进制
public static StringBuffer to16(int x){
StringBuffer sb = new StringBuffer();
if(x==0){
sb.append(0);
}else{
while(x!=0){
int temp = x&15; //取出2进制x的最后4位,用来表示16进制的最后1位
if(temp>=10){
sb.append((char)(temp-10+65));//如果取出的4位2进制数比9大,在16进制中用A-F表示,把 temp-10+'A' 后对应的值转为字符型存入字符串缓冲区中
}else{
sb.append(temp);
}
x = x>>>4; //每次取出后4位,2进制x无符号右移4位,继续判断,直到x的有效位被取光
}
}
return sb; //返回保存的数,输出的时候反转
}
//转8进制
public static StringBuffer to8(int x){
StringBuffer sb = new StringBuffer();
if(x==0){
sb.append(0);
}else{
while(x!=0){
sb.append(x&7);
x = x>>>3;
}
}
return sb;
}
}
复制代码
作者:
niuapp
时间:
2015-5-19 11:42
/*
目标:JinZhi10.java 改版
因为代码重复,所以可以合在一起。
*/
import java.util.Scanner;
class JZX
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("输入一个需要转换的十进制整数");
int x = sc.nextInt();
System.out.println("输入2/8/16");
int j = sc.nextInt();
System.out.println(x+"转"+j+"进制:"+toJ(x, j).reverse());
}
public static StringBuffer toJ(int x, int j){
int i = 0;
switch(j){
case 2:
i = 1;
break;
case 8:
i = 3;
break;
case 16:
i = 4;
break;
default:
System.out.println("不会转这个进制");
}
StringBuffer sb = new StringBuffer();
if(x==0){
sb.append(0);
}else{
while(x!=0){
int temp = x&(j-1); //取出2进制x的最后i位,用来表示j进制的最后1位
if(temp>=10){
sb.append((char)(temp-10+65));//如果取出的4位2进制数比9大,在16进制中用A-F表示,把 temp-10+'A' 后对应的值转为字符型存入字符串缓冲区中
}else{
sb.append(temp);
}
x = x>>>i; //每次取出后i位,2进制x无符号右移i位,继续判断,直到x的有效位被取光
}
}
return sb; //返回保存的数,输出的时候反转
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2