#include <iostream>
using namespace std;
void displayIntBits(int n)
{
int i;
int width = 8;
int len = 32;
for(i = len - 1; i >= 0; i--)
{
cout << ((n >> i) & 1);
if(0 == i % width)
{
cout << " ";
}
}
cout << " <---> " << n <<endl;
}
void displayFloatBits(float f)
{
int *p = (int *)&f; // 以int的眼光来理解这段内存
int i;
int width = 8;
int len = 32;
for(i = 31; i >= 0; i--)
{
cout << ((*p >> i) & 1);
if(0 == i % width)
{
cout << " ";
}
}
printf(" <---> %f\n", f); // 此处不用cout,否则将12.0输出为12
}
int main()
{
float f = 15.5f;
displayFloatBits(f);
int n;
for(n = -7; n <= 7; n++)
{
displayIntBits(n);
}
return 0;
}
结果为:
01000001 01111000 00000000 00000000 <---> 15.500000
11111111 11111111 11111111 11111001 <---> -7
11111111 11111111 11111111 11111010 <---> -6
11111111 11111111 11111111 11111011 <---> -5
11111111 11111111 11111111 11111100 <---> -4
11111111 11111111 11111111 11111101 <---> -3
11111111 11111111 11111111 11111110 <---> -2
11111111 11111111 11111111 11111111 <---> -1
00000000 00000000 00000000 00000000 <---> 0
00000000 00000000 00000000 00000001 <---> 1
00000000 00000000 00000000 00000010 <---> 2
00000000 00000000 00000000 00000011 <---> 3
00000000 00000000 00000000 00000100 <---> 4
00000000 00000000 00000000 00000101 <---> 5
00000000 00000000 00000000 00000110 <---> 6
00000000 00000000 00000000 00000111 <---> 7
看了以上结果,对巩固补码的知识,也是有作用的。在结束本文之前,欣赏一个简单的程序:
#include <iostream>
using namespace std;
int main()
{
int i = 0xffffffff;
cout << i << endl; // 结果为-1
char c = 0xff;
cout << (int)c << endl; // 结果为-1
return 0;
}