C++左移操作位操作
C++ Left Shift Operation Bit Manipulation
我不明白为什么它在某个点后给出负数。我也使用 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
1 << i
..在上面的行中,1
是一个 int
而 i 是一个 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
我不明白为什么它在某个点后给出负数。我也使用 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
1 << i
..在上面的行中,1
是一个 int
而 i 是一个 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