c 中超出char int範圍的整數怎麼儲存?

時間 2021-05-09 09:41:16

1樓:

單個uns64 可以最大表示18446744073709551615,如果還嫌不夠

用陣列的話, 就像本答案:...你想多長都行只要知乎伺服器硬碟夠你存

2樓:

對整數,通常 int, int32_t, int64_t 能解決大部分問題。對於更大的數字,

首先考慮需求:是否是需要非常高的精度?通常其實不需要的。通常情況下,使用 IEEE754 用浮點數描述就可以了。計算的是前 N 位精度外加位數。

實在不行試試 complex type. 如果真的有此需求的時候,也不在乎複雜程度了吧。

儲存空間本質上換的是精度,不是數字的大小。

3樓:

可以使用long或者longlong .

再大的可以使用sizeof和malloc申請一塊記憶體,自己編寫。

或者轉為字串進行儲存。

如果需要高精度計算,可以使用相關的三方庫。

4樓:

還有大量的內建型別,例如stdint.h裡的uint64_t等,這些都可以提供到64位數的支援。

再往上就需要自己寫對應的大數型別,手動模擬運算。

5樓:小春

超出了就換個更大的容器。

char的話,C90定義了wchar_t,Windows上一般是16位,C11定義了兩個定長字元型別char16_t和char32_t。

int的話,gcc和clang在x86上支援乙個非標準整數型別int128_t可以支援最高存128位的整數。

但是我想不出目前有什麼應用場景會用到這麼大的整數……

6樓:

這個題目我會大二學習資料結構我的課程設計就是大數的四則運算要存無限長度的數字就需要自己寫資料結構了

比如長整數就建立乙個int型別的煉表頭指標指向的第乙個單元位符號位裡面存 +1 或者-1 用來表示正整數或者負整數

從第二個節點單元開始填入數字如上圖所示 。

如果想輸出出來就需要對這個鍊錶進行遍歷,

遍歷的順序取決於自己的習慣正向便利就是 123123456789 逆向便利就是 789456123123

所以錄入鍊錶的時候要想好和輸出的時候匹配 ;

鍊錶的錄入和輸出都是需要對整個鍊錶進行遍歷 。

題主可以去反覆學習一下資料結構的鍊錶這個章節的內容。

7樓:pansz

通常而言int不是64位,需要比int大你可以使用 int64_t ,它的大小滿足絕大多數場合。因為可以表達一億的一千億倍大小。

至於更大的數字如果你需要精確表示,可以使用自定義資料型別(類似python中的decimal型別)。不需要精確表示時可以使用浮點型別(科學記數法)。

8樓:孔乙己

有個專業的名詞叫 Wrap around 迴繞

書上當年講這個的時候用了一張圖,畫了乙個時鐘,當指標過了12點,又回到1點。比如一天零乙個小時,迴繞的結果就是一小時。對於char,到了127,再加1,迴繞的結果就是-128。

對於你說的,特別大的數字,有 __int64, long long 這些相對來說存放多一些的數,再大的可以用double,使用科學計數法表示,比如 1.1E10。當然,浮點表達也有侷限性,前面的精度高了,後面的精度就低了。

比如你想記錄個1萬億億點123,可能就記錄不了。這是侷限性,但現實生活中這種需求也比較少,大部分情況(比如記錄光年)用科學計數法就夠用了。

你實在想記錄一萬萬億點123這麼長的數字,其實可以儲存成乙個字串,當然,你沒法用它來直接計算,有一些大數庫來支援這種長數字的運算。

當然,從哲學的角度來理解這個問題的話,我們現實世界就不完美,當然也不可能靠出"完美"的計算機。比如,現實世界給你一張小紙片,讓你寫乙個超大的數字,你該寫不下就是寫不下,也同樣沒辦法。當然,你說你可以再買一張紙……就當你被困井下,只有一張小紙片,只能寫那麼點兒東西傳遞出來……

9樓:SchrodingerZhu

簡單寫了寫自己想到的幾個方面:

單純從 builtin 的資料格式來說的話,在64位環境下 GCC 一般可以提供到 16 個 byte 大小的 integer,在常規 int 型別後面標註 __attribute__((mode(TI))) 就可以使用,一般而言,這至少是 128bits 大小,另外通常可以直接使用 __int128。當然,題目如果只問大於 int 的話,可以先考慮 long long 等資料型別。

對於更大的 integer 就需要寫高精度演算法了,簡單而言就是把整數的每一位存起來操作,但是為了更高效率和節省空間,會有各種操作,如用 FFT 處理乘法,壓位儲存等等。

修正一點,GCC官方文件可以查到最大達到 XI mode 的 machine mode,也就是 64 byte 大小.

10樓:日月

既然能造出來16,32,64位,只要有需要,同樣能製造出你需要的任何位數數字,按照設計規則改一下位數從新設計就行了。而且原生c++還有long ,long long

實際上你也可以自己設計乙個數學庫,支援指定任意位數,不過如果想高效,只搞軟體還不夠,需要設計專用硬體和重構計算機系統體系。只要需求足夠大,這都不是難事。而且軟體python標準庫目前就有對應功能

11樓:渣渣文

超出這個範圍可以用long long儲存,可以存-2^64到2^64-1,這麼多,如果再大,可以用陣列儲存,比如1萬億億,這是10^20次方,只需要20大小的陣列即可。

12樓:無駒無墅

超過int你還有long啊,超過long還有long long。再不行就上GNU Multiple Precision吧。

13樓:車萬白野兔

考慮高精度計算

超出 int 範圍的整數可以按二進位制位拆分成多個 int 「位」然後把它們存放於陣列中(競賽中的板子一般按十進位制下的萬位拆分,比較容易實現,但效率不如按二進位制拆分的方法)。

對於加減法可以用補碼加法實現(手動實現全加器,像豎式計算一樣對每一「位」操作),而乘法則要根據規模依次選擇「豎式計算乘法」、Toom–Cook 演算法、Schnhage–Strassen 演算法。

工程上的實現可以參考 GMP 庫。

對於除法以及其他實現,參考https://gmplib.org/manual/Algorithms

是不是在想象世界中無法想象超出認知範圍的事?

白夜 整體來說沒錯,因為我們認識世界越多,我們對其賦予的定義就越多,乙個白痴可以想象各種光怪陸離的東西,比如一萬多度還不會燙傷人的的高熱椅子,而乙個正常人絕對不會認為那是可行的,上過專業課的還可以說什麼蛋白質高溫變性,材料熔點等來否定這椅子的可能性 而這些條條框框正是我們不斷苦學得來的知識,對溫度有...

C 中超出精度double型別的值為什麼會出現這種現象?

邱昊宇 真心沒那麼複雜。問 比 3 小的最大 double 究竟是多少?答 是 std nextafter 3.0,2.0 比如 double maxBelowThree std nextafter 3.0 2.0 auto uniqueDigits std numeric limits max d...

人可以創造超出知識範圍外的東西嗎?

935a 一 第一次遇到的事兒,毫無準備!人憑本能反應,這兒的思維邏輯不加思索,物質和意識一對一,這就是西方人的形式邏輯,對比。這應該沒有創造,老天把控。二 震撼人心的畫面,穿透人心,映在了人的腦海裡,這叫陰陽,刺眼的Sunny在頭腦中留下了陰影。陰陽是振盪是波動,所以,下一步就是物心和心腦之間來回...