設計一個一百億的計算機

來源:互聯網
上載者:User

標籤:style   color   java   使用   資料   問題   代碼   div   

首先要明白這道題目的考查點是什麼,一是大家首先要對電腦原理的底層細節要清楚、要知道加減法的位元運算原理和知道電腦中的算術運算會發生越界的情況,二是要具備一定的物件導向的設計思想。

首先,電腦中用固定數量的幾個位元組來儲存的數值,所以電腦中能夠表示的數值是有一定的範圍的,為了便於講解和理解,我們先以byte 類型的整數為例,它用1個位元組進行儲存,表示的最大數值範圍為-128到+127。-1在記憶體中對應的位元據為11111111,如果兩個-1相加,不考慮Java運算時的型別提升,運算後會產生進位,二進位結果為1,11111110,由於進位後超過了byte類型的儲存空間,所以進位部分被捨棄,即最終的結果為11111110,也就是-2,這正好利用溢位的方式實現了負數的運算。-128在記憶體中對應的位元據為10000000,如果兩個-128相加,不考慮Java運算時的型別提升,運算後會產生進位,二進位結果為1,00000000,由於進位後超過了byte類型的儲存空間,所以進位部分被捨棄,即最終的結果為00000000,也就是0,這樣的結果顯然不是我們期望的,這說明電腦中的算術運算是會發生越界情況的,兩個數值的運算結果不能超過電腦中的該類型的數值範圍。由於Java中涉及運算式運算時的類型自動提升,我們無法用byte類型來做示範這種問題和現象的實驗,大家可以用下面一個使用整數做實驗的例子程式體驗一下:

int a = Integer.MAX_VALUE;

int b = Integer.MAX_VALUE;

int sum = a + b;

System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);

 

先不考慮long類型,由於int的正數範圍為2的31次方,表示的最大數值約等於2*1000*1000*1000,也就是20億的大小,所以,要實現一個一百億的計算機,我們得自己設計一個類可以用於表示很大的整數,並且提供了與另外一個整數進行加減乘除的功能,大概功能如下:

()這個類內部有兩個成員變數,一個表示符號,另一個用位元組數組表示數值的位元

()有一個構造方法,把一個包含有多位元值的字串轉換到內部的符號和位元組數組中

()提供加減乘除的功能

public class BigInteger{

int sign;

byte[] val;

public Biginteger(String val){

sign = ;

val = ;

}

public BigInteger add(BigInteger other){

}

public BigInteger subtract(BigInteger other){

}

public BigInteger multiply(BigInteger other){

}

public BigInteger divide(BigInteger other){

}

 

}

備忘:要想寫出這個類的完整代碼,是非常複雜的,如果有興趣的話,可以參看jdk中內建的java.math.BigInteger類的源碼。面試的人也知道誰都不可能在短時間內寫出這個類的完整代碼的,他要的是你是否有這方面的概念和意識,他最重要的還是考查你的能力,所以,你不要因為自己無法寫出完整的最終結果就放棄答這道題,你要做的就是你比別人寫得多,證明你比別人強,你有這方面的思想意識就可以了,畢竟別人可能連題目的意思都看不懂,什麼都沒寫,你要敢於答這道題,即使只答了一部分,那也與那些什麼都不懂的人區別出來,拉開了距離,算是矮子中的高個,機會當然就屬於你了。另外,答案中的架構代碼也很重要,體現了一些物件導向設計的功底,特別是其中的方法命名很專業,用的英文單詞很精準,這也是能力、經驗、專業性、英語水平等多個方面的體現,會給人留下很好的印象,在編程能力和其他方麵條件差不多的情況下,英語好除了可以使你獲得更多機會外,薪水可以高出一千元。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.