下面是根據(jù)十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)的算法所寫(xiě)的一段Java程序示例代碼:
專(zhuān)注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)武進(jìn)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
Test t = new Test();
double d = 8;
String s = t.decimal2BinaryStr(d);
System.out.println("十進(jìn)制數(shù)"+d+"轉(zhuǎn)成二進(jìn)制數(shù)為:"+s);
}
/**
* 十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)
* @param d 十進(jìn)制數(shù)
* @return 十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制的字符串
*/
public String decimal2BinaryStr(double d){
String result = decimal2BinaryStr_Inte(d);
result += decimal2BinaryStr_Deci(d);
return result;
}
/**
* 十進(jìn)制整數(shù)部分轉(zhuǎn)二進(jìn)制數(shù)
* @param d 十進(jìn)制數(shù)
* @return 十進(jìn)制整數(shù)部分轉(zhuǎn)換成二進(jìn)制的字符串
*/
public String decimal2BinaryStr_Inte(double d){
// ? ? ?return Integer.toBinaryString((int)d);
/*
* 本來(lái)利用上面的Integer.toBinaryString(int)就可以得到整數(shù)部分的二進(jìn)制結(jié)果,
* 但為了展示十進(jìn)制轉(zhuǎn)二進(jìn)制的算法,現(xiàn)選擇以下程序來(lái)進(jìn)行轉(zhuǎn)換
*/
String result = "";
long inte = (long)d;
int index = 0;
while(true){
result += inte%2;
inte = inte/2;
index++;
if(index%4 == 0){
result+=" ";
}
if(inte==0){
while(index%4!=0){
result+="0";
index++;
}
break;
}
}
char[] c = result.toCharArray();
char[] cc = new char[c.length];
for(int i=c.length; i0; i--){
cc[cc.length-i] = c[i-1];
}
return new String(cc);
}
/**
* 十進(jìn)制小數(shù)部分轉(zhuǎn)二進(jìn)制
* @param d 十進(jìn)制數(shù)
* @return 十進(jìn)制小數(shù)部分轉(zhuǎn)換成二進(jìn)制小數(shù)的字符串
*/
public String decimal2BinaryStr_Deci(double d){
return decimal2BinaryStr_Deci(d, 0);
}
/**
* 十進(jìn)制小數(shù)部分轉(zhuǎn)二進(jìn)制
* @param d 十進(jìn)制數(shù)
* @param scale 小數(shù)部分精確的位數(shù)
* @return 十進(jìn)制小數(shù)部分轉(zhuǎn)換成二進(jìn)制小數(shù)的字符串
*/
public String decimal2BinaryStr_Deci(double d, int scale){
double deci = sub(d,(long)d);
if(deci==0){
return "";
}
//為了防止程序因所轉(zhuǎn)換的數(shù)據(jù)轉(zhuǎn)換后的結(jié)果是一個(gè)無(wú)限循環(huán)的二進(jìn)制小數(shù),因此給其一個(gè)默認(rèn)的精確度
if(scale==0){
scale = (String.valueOf(deci).length()-2)*4;
}
int index = 0;
StringBuilder inteStr = new StringBuilder();
double tempD = 0.d;
while(true){
if(deci==0 || index==scale){
while(index%4!=0){
inteStr.append("0");
index++;
}
break;
}
if(index==0){
inteStr.append(".");
}
tempD = deci*2;
inteStr.append((int)tempD);
deci = sub(tempD ,(int)tempD);
index++;
if(index%4 == 0){
inteStr.append(" ");
}
}
return inteStr.toString();
}
/**
* 提供精確的減法運(yùn)算。
* @param v1 被減數(shù)
* @param v2 減數(shù)
* @return 兩個(gè)參數(shù)的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
}
例如將十進(jìn)制數(shù)1234.5轉(zhuǎn)成二進(jìn)制數(shù)為:0100 1101 0010.1000
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
Test t = new Test();
double d = 8;
String s = t.decimal2BinaryStr(d);
System.out.println("十進(jìn)制數(shù)"+d+"轉(zhuǎn)成二進(jìn)制數(shù)為:"+s);
}
/**
* 十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)
* @param d 十進(jìn)制數(shù)
* @return 十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制的字符串
*/
public String decimal2BinaryStr(double d){
String result = decimal2BinaryStr_Inte(d);
result += decimal2BinaryStr_Deci(d);
return result;
}
/**
* 十進(jìn)制整數(shù)部分轉(zhuǎn)二進(jìn)制數(shù)
* @param d 十進(jìn)制數(shù)
* @return 十進(jìn)制整數(shù)部分轉(zhuǎn)換成二進(jìn)制的字符串
*/
public String decimal2BinaryStr_Inte(double d){
// ? ? ?return Integer.toBinaryString((int)d);
/*
一、java的簡(jiǎn)介
java是由Sun Microsystems公司推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言(以下簡(jiǎn)稱Java語(yǔ)言)和Java平臺(tái)的總稱。
Java由James Gosling和同事們共同研發(fā),并在1995年正式推出。Java最初被稱為Oak,是1991年為消費(fèi)類(lèi)電子產(chǎn)品的嵌入式芯片而設(shè)計(jì)的。
Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器均支持Javaapplet。另一方面,Java技術(shù)也不斷更新。Java自面世后就非常流行,發(fā)展迅速,對(duì)C++語(yǔ)言形成有力沖擊。
在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。2010年Oracle公司收購(gòu)Sun Microsystems。
java顯示二進(jìn)制,主要是使用基本類(lèi)型的包裝類(lèi)的tobinaryString類(lèi)型進(jìn)行轉(zhuǎn)換,代碼如下:
package?com.qiu.lin.he;
import?java.text.ParseException;
public?class?Ceshi?{
public?static?void?main(String[]?args)?throws?ParseException?{
int?i?=?8;
//使用包裝類(lèi)的toBinaryString轉(zhuǎn)換成二進(jìn)制
System.out.println(Integer.toBinaryString(i));
}
}
運(yùn)行結(jié)果如下
java中的JVM是能夠在計(jì)算機(jī)CPU上執(zhí)行的二進(jìn)制代碼。
java的執(zhí)行過(guò)程
Java代碼需要經(jīng)過(guò)編譯和解釋兩個(gè)步驟,才在能在平臺(tái)上運(yùn)行。首先java語(yǔ)言的編譯器,幫java代碼編譯成class的字節(jié)碼,之后通過(guò)java虛擬機(jī)(JVM)來(lái)解釋執(zhí)行。
java代碼的編譯
java代碼是如何編譯的?
首先編譯的解釋?zhuān)喊延酶呒?jí)程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的源程序,翻譯成等價(jià)的計(jì)算機(jī)匯編語(yǔ)言或機(jī)器語(yǔ)言書(shū)寫(xiě)的目標(biāo)程序的翻譯程序。編譯的具體過(guò)程,可以看看《編譯原理》相關(guān)的書(shū)籍。
其實(shí)java的編譯過(guò)程,和通常c/c++還是不同的。
java編譯后的字節(jié)碼文件格式主要分為兩部分:常量池和方法字節(jié)碼。常量池記錄的是代碼出現(xiàn)過(guò)的所有token(類(lèi)名,成員變量名等等)以及符號(hào)引用(方法引用,成員變量引用等等);方法字節(jié)碼放的是類(lèi)中各個(gè)方法的字節(jié)碼。
Java編譯器卻不將對(duì)變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過(guò)程中的內(nèi)存布局,而是將些符號(hào)引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行過(guò)程中創(chuàng)立內(nèi)存布局,然后再通過(guò)查表來(lái)確定一個(gè)方法所在的地址,這樣就有效地保證了java的可移植性和安全性。
c/c++的編譯,當(dāng)C編譯器編譯生成一個(gè)對(duì)象的代碼時(shí),該代碼是為在某一特定硬件平臺(tái)運(yùn)行而生成的。因此在編譯過(guò)程中,編譯程序通過(guò)查表將所有對(duì)符號(hào)的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序運(yùn)行。
java虛擬機(jī)(JVM)
簡(jiǎn)單的可以這樣理解它的功能:就是將java編譯之后的字節(jié)碼,解釋成cpu能夠執(zhí)行的二進(jìn)制代碼。
JVM是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的。JVM有自己完善的硬件架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。JVM?的主要工作是解釋自己的指令集(即字節(jié)碼)并映射到本地的?CPU?的指令集或?OS?的系統(tǒng)調(diào)用。Java語(yǔ)言是跨平臺(tái)運(yùn)行的,其實(shí)就是不同的操作系統(tǒng),使用不同的JVM映射規(guī)則,讓其與操作系統(tǒng)無(wú)關(guān),完成了跨平臺(tái)性。JVM?對(duì)上層的?Java?源文件是不關(guān)心的,它關(guān)注的只是由源文件生成的類(lèi)文件(?class file)。類(lèi)文件的組成包括?JVM?指令集,符號(hào)表以及一些補(bǔ)助信息。
java虛擬機(jī)工作的原理,可以自己找一下網(wǎng)上的資料。大家還需要思考的問(wèn)題,jvm的內(nèi)存、jvm的垃圾回收(GC)、Android的朋友還要區(qū)分(Dalvik 和標(biāo)準(zhǔn) Java 虛擬機(jī)JVM)的區(qū)別。
總結(jié):
java代碼編譯之后,可以直接運(yùn)行在Windows或者其它裝有JVM虛擬機(jī)的系統(tǒng)下。而C或C++直接編譯成與機(jī)器和操作系統(tǒng)相關(guān)的代碼。所以C語(yǔ)言編譯的程序沒(méi)有跨平臺(tái)性,就算沒(méi)有使用到操作系統(tǒng)相關(guān)的API,在不同的系統(tǒng)下也必須重新編譯才能運(yùn)行。
由java編譯器把源文件編譯成虛擬機(jī)可以識(shí)別的二進(jìn)制代碼稱為字節(jié)碼。
而字節(jié)碼是由java解釋器去解釋執(zhí)行的。
稍微修改了一下:
import java.math.BigInteger;
import java.lang.Math;
public class HardWork {
public static void main(String args[]) {
double L;
double m;
L=Math.log(31)*10000;
m= 15.5*(Math.pow(2,L)-1);
String a =String.valueOf((int)L);//輸入數(shù)值
BigInteger src = new BigInteger(a);
System.out.println(src.toString(2));
System.out.println(L);
System.out.println(m);
}
}
運(yùn)行測(cè)試:
1000011000100011
34339.872044851465
Infinity
當(dāng)前文章:包含2進(jìn)制代碼java的詞條
文章出自:http://muchs.cn/article48/docoghp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、微信公眾號(hào)、做網(wǎng)站、品牌網(wǎng)站制作、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容