以下是C++的:
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的開化網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
#includeiostream
using namespace std;
int main()
{
int a,b,c,d;
cout"請輸入待轉(zhuǎn)換的數(shù):";
cina;
//二進制分別計算每一位
if(a==0)couta;
b=a;c=0;d=1;
while(b!=0)
{
c+=(b%2)*d;//依次把b除以2的余數(shù)寫在c的對應(yīng)位置上
b=b/2;
d*=10;
}
coutcendl;
//八進制和十六進制使用格式化輸出即可,oct表示八進制,hex表示十六進制
coutoctaendl;
couthexaendl;
}
String oct = Integer.toOctalString( args);//括號里是要轉(zhuǎn)換的十進制數(shù)
八進制和十六進制是字符串形式,轉(zhuǎn)換出來后要有String類引用。
八進制字符串轉(zhuǎn)為10進制
int s = Integer.parseInt(oct, 8);//第一個參數(shù)是要轉(zhuǎn)換為10進制的字符串,第二個參數(shù)是表明字符串是幾進制的數(shù),這里是8進制。也可以是2,10,16.
import java.util.Scanner;
import java.util.Stack;/**
* 將十進制數(shù)轉(zhuǎn)換為八進制數(shù)
*
* @author austin
*/
public class DecimalToOctalConvertor { /**
* @param args
*/
public static void main(String[] args) {
/*
* 接收一個用戶從通過鍵盤輸入的整數(shù),作為要轉(zhuǎn)換的十進制數(shù)
*/
Scanner reader = new Scanner(System.in);
System.out.print("請輸入要轉(zhuǎn)換的十進制數(shù):");
int decimalNum = reader.nextInt(); /*
* 采用除8取余,從下至上的算法來計算八進制數(shù):即用進制數(shù)除以8,然后將所得余數(shù)作為8進制數(shù)的低位數(shù),再用所得的商繼續(xù)除以8,以此類推,直到商為0為止
* 在這個過程中,每次的余數(shù)都需要保存到一個列表中,而且后添加到列表中的元素要先輸出,即后進先出,因此采用棧結(jié)構(gòu)來處理
*/
StackInteger octalStack = new StackInteger();
int temp = decimalNum;
do {
octalStack.push(temp % 8); // 將除以8所得的余數(shù)添加到棧中
temp /= 8; // 計算除以8所得的商
}
while (temp != 0); // 如果商不為0,則繼續(xù)計算下去 /*
* 采用后進先出的方式輸入棧中的元素,就得到了所要求的八進制數(shù)
*/
System.out.print("八進制:0");
while (!octalStack.isEmpty()) {
System.out.print(octalStack.pop());
}
System.out.println();
}
}
只向你講解一下整數(shù)部分的轉(zhuǎn)換規(guī)則。至于小數(shù)部分,則比較復(fù)雜。
先說非十進制轉(zhuǎn)十進制,比較簡單:
將數(shù)從右到左編號,最右邊的編號是0,右邊第二位編號為1,依此類推.
將給定數(shù)的各位值乘以進制的編號次方,再得到的結(jié)果相加即可.說起來不好理解,舉個例子:
二進制: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自帶的計算器驗證.(查看-科學(xué)型).
====
至于十進制轉(zhuǎn)非十進制,比較麻煩,要用到 連續(xù)除法求余 的計算.
用給定的數(shù)除以進制(如8,16,2),將得到商和余數(shù),再將商除以進制,又得到商和余數(shù).一直除到商為0為止.
然后將 所有得到的余數(shù) 按照出現(xiàn)的 相反 的順序排列起來,即得到結(jié)果.
舉例:
124(十進制)轉(zhuǎn)二進制,連續(xù)除以"2",運算如下:
被除數(shù)/進制 = 商……余數(shù)
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
將所有出現(xiàn)的余數(shù)從后向前排列,就得到最后結(jié)果為:1111100
同樣,將其轉(zhuǎn)為八進制:
124 /8 = 15……4
15 /8 = 1……7
1 /8 = 0……1
結(jié)果即為174(八進制).
同樣可在計算器上試驗一下.
package hextooctal;
import java.util.HashMap;
public class HexToOctal {
public static void main(String[] args) {
String str = hexToOctal("1a5f");
System.out.println(str);
}
//十六進制轉(zhuǎn)八進制
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);
}
//十六進制轉(zhuǎn)成二進制
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);
}
//二進制轉(zhuǎn)成八進制
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;
}
}
十進制轉(zhuǎn)八進制JDK有提供API,
十進制轉(zhuǎn)八進制最簡單的方法:
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));