2016-02-21 111 views
-3

我一直在使用已簽名的long long,並且有奇怪的問題 - 即不一致的行爲。即C++ long long issues

long long i; 
printf("%d", i); 

這往往會打印出與i的實際值無關的值(這也與cout有關)。

它也有%隨機的行爲,即

if(i % x == 0) 
     //some code 

這有時會運行即如果i = 15x = 5它只是不會返回true,因此if語句將不會運行的代碼。

由於某種原因,它傾向於在x = 7上返回true。

我相信這可能是編譯器的錯,我認爲它只是g ++編譯器(它在競爭中)。

任何方式來減輕這個或爲什麼這樣做將不勝感激。

+5

'long long i; printf(「%d」,i);'這是**未定義行爲**。 – cpplearner

+3

我應該添加%lld嗎? – Cjen1

+4

@ Cjen1 _「我認爲這可能是編譯器的錯誤......」這是一種非常罕見的情況,大部分時間是您的代碼有bug。 –

回答

0

要使用printf樣式語法來打印各種整數類型,需要使用可怕的語法 - 我建議使用C++類型安全的iostreams代替。