存儲超大數字
『壹』 c#怎麼儲存更大的數字 double和long儲存的數字范圍的確很廣,但總有上限,比如我計算√2
據我所知C#最精確的類型是decimal,最多精確28位有效數據,按你的要求,只能手動實現高精度,而且精確到幾百億即使銀河那個級別的大型機也要跑到人類毀滅,而且在大型機上是不會使用C#的。
以下內容摘自《C#語言規范5.0》的4.1.7章
decimal 類型
decimal類型是 128 位的數據類型,適合用於財務計算和貨幣計算。decimal類型可以表示具有 28 或 29 個有效數字、從 1.0 × 10−28到大約 7.9 × 1028 范圍內的值。
decimal類型的有限值集的形式為 s × c × 10-e,其中符號 s是 0 或 1,系數c由 0 ≤ c < c < 296 給定,小數位數 e滿足 0 ≤ e ≤ 28。decimal類型不支持有符號的零、無窮大或 NaN。decimal可用一個以 10 的冪表示的 96 位整數來表示。對於絕對值小於 1.0m的 decimal,它的值最多精確到第 28位小數。對於絕對值大於或等於 1.0m的 decimal,它的值精確到小數點後第28 或 29 位。與 float和 double數據類型相反,十進制小數數字(如 0.1)可以精確地用 decimal表示形式來表示。在 float和 double表示形式中,這類數字通常變成無限小數,使這些表示形式更容易發生舍入錯誤。
如果二元運算符的一個操作數為 decimal類型,則另一個操作數必須為整型或 decimal類型。如果存在一個整型操作數,它將在執行運算前轉換為 decimal。
decimal類型值的運算結果是這樣得出的:先計算一個精確結果(按每個運算符的定義保留小數位數),然後舍入以適合表示形式。結果舍入到最接近的可表示值,當結果同樣地接近於兩個可表示值時,舍入到最小有效位數位置中為偶數的值(這稱為「銀行家舍入法」)。零結果總是包含符號 0 和小數位數 0。
如果十進制算術運算產生一個絕對值小於或等於 5 × 10-29 的值,則運算結果變為零。如果 decimal算術運算生成的結果對於 decimal格式來說太大,則將引發 System.OverflowException。
與浮點型相比,decimal類型具有較高的精度,但取值范圍較小。因此,從浮點型到 decimal的轉換可能會產生溢出異常,而從 decimal到浮點型的轉換則可能導致精度損失。由於這些原因,在浮點型和 decimal之間不存在隱式轉換,如果沒有顯式地標出強制轉換,就不可能在同一表達式中同時使用浮點操作數和 decimal操作數。
『貳』 int類型能夠存儲的最大數值是多少2進制
int類型能存儲的最大數值是2^32
int類型在內存中佔4個位元組,也就是用32位二進製表示。其中最高位為符號位,0表示正,1表示負。
int類型正數上限二進製表示為0111 1111 1111 1111即(2^32)-1,表示0的符號位是0(即最高位是0):0000 0000 0000 0000
由於0已經被正數這一邊表示了,所以負數的1000 0000 0000 0000就可以用來表示-2^32
『叄』 c語言中怎麼存儲一個很大很大的數
C語言的系統類型,均有大小的限制。超出這個存儲范圍,就無法用該類型進行存儲。所以需要根據數據規模,來選擇存儲類型。
當需要存儲的數很大很大,超出所有可以類型可以表示的范圍時,比如一個100位的10進制數,就需要用字元串的方式進行存儲。這種存儲方式,在演算法中稱為大數存儲,對這種大數的計算,稱為大數計算。
(3)存儲超大數字擴展閱讀:
順序結構:
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子裡面的水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為:c = a; a = b; b = c;執行結果是a = 5,b = c = 3如果改變其順序。
寫成:a = b; c = a; b =c;則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算、輸出三步曲的程序就是順序結構。
例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。
『肆』 一個位元組可以存儲多大的數字
一個位元組有8位,每一位兩種狀態1或者0
計算機儲存數據是以二進制的方式,有一位為符號位,所以最大數為01111111轉化為十進制數為127。
若無符號,最大數為11111111轉化為十進制為255。
二進制,是計算技術中廣泛採用的一種數制,由德國數理哲學大師萊布尼茨於1679年發明。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」。
當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用「開」來表示1,「關」來表示0。
(4)存儲超大數字擴展閱讀:
與十進制
1,二進制轉十進制
方法:「按權展開求和」。
2,十進制整數轉二進制數:「除以2取余,逆序排列」(除二取余法)
3,十進制負數轉二進制:「先取正數的二進制值,再取反,加1」。
與八進制
二進制數轉換成八進制數:從小數點開始,整數部分向左、小數部分向右,每3位為一組用一位八進制數的數字表示,不足3位的要用「0」補足3位,就得到一個八進制數。
八進制數轉換成二進制數:把每一個八進制數轉換成3位的二進制數,就得到一個二進制數。
與十六進制
二進制數轉換成十六進制數:二進制數轉換成十六進制數時,只要從小數點位置開始,向左或向右每四位二進制劃分一組(不足四位數可補0),然後寫出每一組二進制數所對應的十六進制數碼即可。
十六進制數轉換成二進制數:把每一個十六進制數轉換成4位的二進制數,就得到一個二進制數。
參考資料來源:網路-二進制
『伍』 如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種算
在C/C++裡面已經有了這種數據結構 LONGLONG java裡面則用BigInteger來表示任意長得整數
『陸』 一個位元組可以存儲多大的數字
一個位元組有8個位,每個位有2種狀態
1和0
於是呢
如果將首位作為符號位
即1為負數
0為整數
則
一位元組存的最小數為
11111111(-128)
最大數為
01111111(127)
如果沒有符號位則
最小數為00000000(十進制0)
最大數為11111111(十進制255)
『柒』 如何用C++做到存儲一個超大數字
可以用unsigned __int64或unsigned long long int類型存儲。
用string你怎麼實現200!的計算過程?