我無法理解為什么它在某個點之后給出負數。我也使用 long long 來防止溢位。
代碼
#include <iostream>
using namespace std;
int main() {
for(long long i=0;i<64;i ){
cout << 1LL*(1<<i) << " ";
}
return 0;
}
輸出
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 -2147483648 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 -2147483648
uj5u.com熱心網友回復:
1 << i
..在上面的行中,1是一個int,我是一個long long。因此,要解決您的問題,您可以long long這樣轉換為:
#include <iostream>
using namespace std;
int main() {
for (long long i = 0; i < 64; i ) {
cout << 1LL * (static_cast<long long>(1) << i) << " ";
}
return 0;
}
這將允許您獲得更高的值。
您也可以使用1LL( 1 long long) 代替強制轉換:
cout << 1LL * (1LL << i) << " ";
..有了這個你可以洗掉1LL *:
cout << (1LL << i) << " "; // Brakcets are required
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/433859.html
