2016-06-07 26 views
-2

輸入:爲什麼編譯器打印的值是0?如何在編碼中實現這個邏輯?

cout << (4 % ((10^9)+1)); 

輸出:

0 

編譯:G ++ 4.8.4

我不知道爲什麼編譯器打印值爲0。我現在要做的預期產出?

什麼是打印輸出的正確代碼?

+1

*爲什麼*你會希望輸出爲「4」? (這是意見的東西 - 意圖...) – DevSolar

+0

在C++ ^意味着XOR和10 XOR 9 = 3也4%(3 + 1)= 0你必須使用pow函數。 – aghilpro

+0

'10^9 = 3'因爲'^'是異或運算。 – GAVD

回答

1

謝謝你解釋這個邏輯。我已經在你的幫助下理解了這個邏輯,這是我解決這個邏輯的解決方案。

cout << (4 % ((10^9)+1)); ==> cout <<fmod(5, (pow(10,9)+1)); 

我的錯誤是使用^代替POW()%,而不是FMOD()的。

  1. ^運算符在C++中是按位異或。(剛剛意識到你的意見,感謝信息傢伙)。
  2. %運算符用於整數。所以,我已經使用fmod()函數。因爲我的計算需要比整數類型更多。
4

^是一個按位異或運算,不是指數。 10^9是3.

所以4 % ((10^9) + 1) = 4 % (3 + 1) = 4 % 4 = 0。編譯器是正確的。

你的意思是std::pow(10L, 9L),注意不要溢出一個整型?然後回答爲4(儘管您必須將std::pow歸還爲%運算符的適當整數類型)。

+0

「int」不能保證能夠表示大於「32767」的值。 'std :: pow()'返回一個浮點值,浮點值不能用作'%'的操作數。 – Peter

+0

C++ 11爲std :: pow引入了一個重載卡車負載。 – Bathsheba

+0

確實如此,但它們都不具有完整的返回類型。 – Peter

0

我不知道爲什麼編譯器打印的值是0.我現在要爲 做預期的輸出嗎?

(10^9) == 3 

^操作者在C按位XOR ++。即,在二進制

decimal binary 
10  0110 
9   0101 


0110^0101 == 0011 

並且因此:

10^9 == 3 

因此:

(10^9) + 1 == 4 

4 % ((10^9) + 1) == 0 
+0

那麼,在這種情況下,我如何在編碼中實現這個計算?你能幫我嗎 – gopigoppu

+0

@gopigoppu'10^9'對你來說意味着什麼? – 101010

+0

no no ...我能理解邏輯...如何實現這個邏輯(4%((10^9)+1));編碼 – gopigoppu

1
((10^9)+1) = 4 
4 % 4 = 0 

%運算符返回除法的其餘部分。例如,4/3 = 0和3作爲餘數,所以它將返回3,但4/4 = 1並且沒有餘數,所以它返回0.

1

編譯器顯示正確的答案。

(10^9) = 3 

((3) + 1) = 4 

4 % (4)= 0 

模數(%)運算符返回除法後的餘數。有關模數運算符的教程,請參閱this頁面。

相關問題