以下是C++的:
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站建设、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的开化网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
#includeiostream
using namespace std;
int main()
{
int a,b,c,d;
cout"请输入待转换的数:";
cina;
//二进制分别计算每一位
if(a==0)couta;
b=a;c=0;d=1;
while(b!=0)
{
c+=(b%2)*d;//依次把b除以2的余数写在c的对应位置上
b=b/2;
d*=10;
}
coutcendl;
//八进制和十六进制使用格式化输出即可,oct表示八进制,hex表示十六进制
coutoctaendl;
couthexaendl;
}
String oct = Integer.toOctalString( args);//括号里是要转换的十进制数
八进制和十六进制是字符串形式,转换出来后要有String类引用。
八进制字符串转为10进制
int s = Integer.parseInt(oct, 8);//第一个参数是要转换为10进制的字符串,第二个参数是表明字符串是几进制的数,这里是8进制。也可以是2,10,16.
import java.util.Scanner;
import java.util.Stack;/**
* 将十进制数转换为八进制数
*
* @author austin
*/
public class DecimalToOctalConvertor { /**
* @param args
*/
public static void main(String[] args) {
/*
* 接收一个用户从通过键盘输入的整数,作为要转换的十进制数
*/
Scanner reader = new Scanner(System.in);
System.out.print("请输入要转换的十进制数:");
int decimalNum = reader.nextInt(); /*
* 采用除8取余,从下至上的算法来计算八进制数:即用进制数除以8,然后将所得余数作为8进制数的低位数,再用所得的商继续除以8,以此类推,直到商为0为止
* 在这个过程中,每次的余数都需要保存到一个列表中,而且后添加到列表中的元素要先输出,即后进先出,因此采用栈结构来处理
*/
StackInteger octalStack = new StackInteger();
int temp = decimalNum;
do {
octalStack.push(temp % 8); // 将除以8所得的余数添加到栈中
temp /= 8; // 计算除以8所得的商
}
while (temp != 0); // 如果商不为0,则继续计算下去 /*
* 采用后进先出的方式输入栈中的元素,就得到了所要求的八进制数
*/
System.out.print("八进制:0");
while (!octalStack.isEmpty()) {
System.out.print(octalStack.pop());
}
System.out.println();
}
}
只向你讲解一下整数部分的转换规则。至于小数部分,则比较复杂。
先说非十进制转十进制,比较简单:
将数从右到左编号,最右边的编号是0,右边第二位编号为1,依此类推.
将给定数的各位值乘以进制的编号次方,再得到的结果相加即可.说起来不好理解,举个例子:
二进制:10101
编号: 43210
计算:1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 1 * 16 + 0*8 + 1*4 + 1*1 = 21(十进制)
十六进制:0xA9D3
编号:3210
计算:A*16^3 + 9*16^2 + D*16^1 + 3*16^0
=10*4096 + 9*256 + 13*16 + 3 = 43475(十进制)
不信可以用WINDOWS自带的计算器验证.(查看-科学型).
====
至于十进制转非十进制,比较麻烦,要用到 连续除法求余 的计算.
用给定的数除以进制(如8,16,2),将得到商和余数,再将商除以进制,又得到商和余数.一直除到商为0为止.
然后将 所有得到的余数 按照出现的 相反 的顺序排列起来,即得到结果.
举例:
124(十进制)转二进制,连续除以"2",运算如下:
被除数/进制 = 商……余数
124 /2 = 62……0
62 /2 = 31……0
31 /2 = 15……1
15 /2 = 7……1
7 /2 = 3……1
3 /2 = 1……1
1 / 2 = 0……1
将所有出现的余数从后向前排列,就得到最后结果为:1111100
同样,将其转为八进制:
124 /8 = 15……4
15 /8 = 1……7
1 /8 = 0……1
结果即为174(八进制).
同样可在计算器上试验一下.
package hextooctal;
import java.util.HashMap;
public class HexToOctal {
public static void main(String[] args) {
String str = hexToOctal("1a5f");
System.out.println(str);
}
//十六进制转八进制
public static String hexToOctal(String str) {
String s = hexToBinary(str);
//System.out.println(s);
String s1 = binaryHandle(s);
//System.out.println(s1);
return binaryToOctal(s1);
}
//十六进制转成二进制
public static String hexToBinary(String hexNum){
char[] chs = {'0','1'};
String str = new String("0123456789ABCDEF");
char[] charArray = hexNum.toUpperCase().toCharArray();
int pos = charArray.length*4;
char[] binaryArray = new char[pos];
for (int i = charArray.length - 1; i =0; i--) {
int temp = str.indexOf(charArray[i]);
for(int j=0;j4;j++){
binaryArray[--pos] = chs[temp 1];
temp = temp 1;
}
}
return new String(binaryArray);
}
//二进制转成八进制
public static String binaryToOctal(String binary){
HashMapString,Character map = new HashMapString, Character();
map.put("000", '0');
map.put("001", '1');
map.put("010", '2');
map.put("011", '3');
map.put("100", '4');
map.put("101", '5');
map.put("110", '6');
map.put("111", '7');
int pos = binary.length()/3;
char[] octArray = new char[pos];
for(int i = binary.length();i0;i-=3){
String s = binary.substring(i-3,i);
octArray[--pos] = map.get(s);
}
return new String(octArray);
}
//处理二进制字符串
public static String binaryHandle(String binary){
String str = binary.substring(binary.indexOf('1'));
int len = str.length();
if(len%3==0)
return str;
else if(len%3 == 1)
return "00"+str;
else
return "0" + str;
}
}
十进制转八进制JDK有提供API,
十进制转八进制最简单的方法:
System.out.println("10的八进制="+Integer.toOctalString(10));
System.out.println("10的二进制="+Integer.toBinaryString(10));
System.out.println("10的八进制="+Integer.toOctalString(10));
System.out.println("10的十六进制="+Integer.toHexString(10));