2017-12-27 1644 views
-1

現在,我有我怎樣才能在沒有警告的情況下設置一個很長的長號碼?

long long x = 1 << 60; 
cout << x << endl; 

,我知道,很長很長的範圍可以是一路攀升至2^64,但由於某些原因,當我執行一段代碼,它給了我一個警告,說「left shift count >= width of type [-Wshift-count-overflow].

另外,0被打印到屏幕上,這顯然不是我想要的。

我試圖把文字「LL」之後,但我不知道我應該把它:

long long x = (1 << 60)ll; 
long long x = (1 << 60ll); 

和他們沒有工作

任何人都可以請告訴我如何解決這個問題?提前致謝!

+1

使用正確的文本類型:http://en.cppreference.com/w/cpp/language/integer_literal –

+0

@NeilButterworth我試過了,但我應該把它放在60之後? 1之後?括號之後? –

+0

因爲你似乎在隨意地嘗試一些事情,所以請注意,在(1 << 60)'中有** 3個**位置可以添加'll';你只試過其中兩個。 –

回答

3

這是一個常見的錯誤期待這個表達式:

long long x = 1 << 60; 

這種類型的左側會影響右側的計算。它不是,1 << 60的結果轉換爲左邊的類型,但它不影響1 << 60本身的計算。所以,正確的解決辦法是改變的1類型:

long long x = static_cast<long long >(1) << 60; 

long long x = 1LL << 60; 

甚至

auto x = 1LL << 60; 
+0

哦,好的,非常感謝你! –

相關問題