32位整数的二进制打印:
#include <iostream>
using namespace std;
void print(int num) {
for (int i = 31; i >= 0; i--) { //int占32位
if ((num & (1 << i)) == 0) cout << 0;
else cout << 1;
}
cout << endl;
}
int main() {
int num;
while (cin >> num) print(num);
return 0;
}
int
是有符号整数,在C++中其占32位,理论上能表示的范围应该是 0 ~ 232 - 1,但是最高位表示的是符号,且一半用于表示正数,一半用于表示负数,所以真正能表示的范围是
−
2
31
-2^{31}
−231 ~
2
31
−
1
2^{31} - 1
231−1。
C++中的 32 位无符号整数,所有位都用于表示值,所以表示的范围是0 ~ 232 - 1。
#include <iostream>
using namespace std;
void print(int num) {
for (int i = 31; i >= 0; i--) {
if ((num & (1 << i)) == 0) cout << 0;
else cout << 1;
}
cout << endl;
}
int main() {
int value = INT_MAX;
cout << value << endl; //2147483647,最高位为1,表示负数,后面的30位取反都为1,然后加1,有一个进位,所以结果为2^31,最终就是-2^31
print(value); //01111111111111111111111111111111
value = INT_MIN;
cout << value << endl; //-2147483648
print(value); //10000000000000000000000000000000
value = 0xffffffff;
cout << value << endl; //-1,负数的值是最高位符号位为1,表示负,其结果为后面的所有位取反再加1
print(value); //11111111111111111111111111111111
unsigned int v = 0xffffffff;
cout << v << endl; //4294967295
print(v);//11111111111111111111111111111111
return 0;
}