//5的原码 00000000 00000000 00000000 00000101
//反码 正数的反码和原码一样
//补码 正数的补码和原码一样
//-5的原码 32位二进制第三十二位为符号位 10000000 00000000 00000000 00000101
//反码 除符号位不变其余位取反 11111111 11111111 11111111 11111010
//补码 反码+1 11111111 11111111 11111111 11111011
不多说,上代码
#include <iostream>
#include <bitset>
using namespace std;
//5的原码 00000000 00000000 00000000 00000101
//反码 正数的反码和原码一样
//补码 正数的补码和原码一样
//-5的原码 32位二进制第三十二位为符号位 10000000 00000000 00000000 00000101
//反码 除符号位不变其余位取反 11111111 11111111 11111111 11111010
//补码 反码+1 11111111 11111111 11111111 11111011
//判断三十二位二进制数1的个数
int hammingWeight(uint32_t n) {
int res = 0;
for (int i = 0; i < 32; i++)
{
if (n & (1 << i))
{
res++;
}
}
return res;
}
void print32_t(int n)
{
//bitset容器遍历二进制数的各个位
bitset<32> bit(n);//参数可以为string 或 int 等等
for (int i = 31; i>=0; i--)
{
cout << bit[i];
}
}
int main()
{
cout << hammingWeight(5);
cout << endl;
print32_t(5);
cout << endl;
//负数在计算机用补码表示
print32_t(-5);
}
运行结果