2010-03-10 105 views
5

我正在爲我在大學的數學課程的c編程項目工作。 我需要能夠處理大於那些可以存儲在'long int'數據類型中的大整數。所以,我想用「長長整型」,但如果我嘗試這樣的事:'long long int'被解釋爲'long int'。我該如何解決這個問題?

long long int number; 
number = 10000000000; 

然後錯誤消息說「錯誤整型常量‘長’式的過大」。

我試過其他數據類型,如'___int64'和'int_64t'我試過包括所有的標準C庫,我仍然遇到同樣的問題。

奇怪的是,當我嘗試'printf("LLONG_MAX = %lld\n", LLONG_MAX);',我得到這個:

LLONG_MAX = -1 

我使用的代碼塊8.02在Windows XP上,但我不知道安裝的是什麼版本的GCC編譯器,因爲我使用校園內的網絡計算機,我無權訪問主文件系統。我不想每天都將筆記本電腦帶入校園。請幫忙!謝謝

回答

1

在微軟環境中使用的printf這個語法:

 
    __int64 i64 = 10000000000; 
    unsigned __int64 u64 = 10000000000000000000; 

    printf ("%I64d\n", i64); 
    printf ("%I64u\n", u64); 
    printf ("%I64d\n", u64); <-- note this typo 

+0

謝謝!它現在工作:) – Eddy 2010-03-10 16:53:37

3

在整數常量的末尾添加一個ll

+0

我試過了。不工作 number = 10000000000ll printf(「number =%lld,number); 給我'number = 141006540​​8' – Eddy 2010-03-10 15:49:30

+0

也許你可能會指定」ll「是小寫的」LL「,而不是我的意思與你寫的和差的十一(11) [編輯] 如果你知道安裝GCC在那裏,你可以輸入「GCC -v」來獲得的版本。 – 2010-03-10 16:04:26

+0

呀遺憾的混亂。我不知道如何讓GCC的版本,我使用Windows XP不是Linux這樣的命令「海灣合作委員會」在命令提示符下不被認可。除了 – Eddy 2010-03-10 16:10:25

0

Um,Code :: Blocks使用GCC作爲其通常的編譯器。最近的版本明確支持64位類型。

所以,你應該能夠

#include <inttypes.h> 
uint64_t unsigned64BitNumber; 
int64_t signed64BitNumber; 
0

你應該能夠使用很長很長int型和gcc編譯器,但我認爲它可能需要使用C99 STD代碼中作爲默認可能是C89模式。嘗試添加--std = c99到你的編譯器命令行,看看是否有幫助:-)

+0

那到pavpanchekha的響應 – PinkyNoBrain 2010-03-10 15:45:59

+0

對不起,我有點福利局的,我不使用命令行我只是在代碼塊中單擊「構建並運行」。我該怎麼做? – Eddy 2010-03-10 15:55:48

+0

沒問題。因爲我使用了代碼塊,但是我想去「設置」,然後「編譯器和調試器」調出相關的窗口。從那裏您需要「編譯器設置/編譯器標誌」選項卡,並查找和選擇使用C99模式或ISO C90進行c程序。我不確定確切的選項名稱。 一半,http://www.codeblocks.org/docs/main_codeblocks_en3.html descibes HTHE編譯器選項窗口 – PinkyNoBrain 2010-03-10 16:14:07

0

也許編譯器被數據類型的int部分弄糊塗 - 你試過用long long來代替嗎?

This website可能會幫助你。

+0

我試過了。我也看了一下這個網站,這讓我嘗試了'printf(「LLONG_MAX =%lld」LLONG_MAX);'。它給了我LLONG_MAX = -1這是相當奇怪的: – Eddy 2010-03-10 15:59:00

11

當編譯器編譯C文件並遇到整數或浮點常量時,需要爲其分配一個類型。它會爲你隱式選擇一個默認類型。您可以通過向編譯器提供整數後綴來顯式設置類型。一個整數後綴可以告訴編譯器它是一個很長的長文件,還是無符號的類型。

  • 10是隱式有符號整數
  • 10U,10U是明確的無符號整數
  • 10L,10L是明確地有符號長整數
  • 10ll,10LL或在Win32 10i64是明確地有符號長長整型
  • 10ull是明確爲unsigned long long

浮點類型也有這種情況。一種類型可以是浮動,雙重 或長雙。浮點類型通常默認爲double。

  • 10.0隱式雙
  • 10.0f或10.0F是明確的浮動
  • 10.0升或10.0L是明確一個長雙
0

除了有關後綴先前的評論和海灣合作委員會的C99模式,如果你不能長時間工作,並且你只需要2^52的整數,你可以使用double來逃脫。假設IEEE雙精度格式(0 +1偏差指數),最大爲2^52的整數應該可以精確表示爲double。

0

隨着人們已經發布,你應該檢查你所使用的編譯器。 代碼:阻止你做(在我的版本,無論如何,希望這會爲你工作太):

首先找出編譯器選擇爲您的項目選擇 項目 - >構建選項...,看看是什麼它在「選定的編譯器」中說

然後選擇: 設置 - >編譯器和調試器...並選擇你剛發現的編譯器。 然後點擊「工具鏈可執行文件」並查看它對於例如「C編譯器」。

也許如果你成功了,和你的結果發表,有人在這裏將能夠幫助你。