您的位置:首页 > 编程语言 > C语言/C++

int abs(int number)函数有感: 求补码和通过补码求对应的整数 C++(增加:数字的二进制表示中1的个数)

2017-03-12 16:06 369 查看
#include "limits.h"
#include "math.h"

int abs(int number)
{
int const mask = number >> (sizeof(int) * CHAR_BIT - 1);
return (number + mask) ^ mask;
}


  这是一个求绝对值的函数,看了它不禁想起负数在计算机中的构成.

  负数在计算机中是按补码存储的,如何给定一个int型数,输出它的补码呢?以及给一个数的补码,如何求出这个数呢?(假设是32位的系统)

  下面是我写的两个函数,分别是①将数字转换成二进制补码形式,以字符串形式输出 ②以二进制补码的字符串输入,输出二进制补码对应的整数

#include <iostream>
#include <string>

using namespace std;

string toBinary(int x)
{
string result;
short int i;
char a[33];
a[32]='\0';

for (i=0;i<32;i++)
{ if ( (x & 1<<(31-i) )==0 )
result += '0';
else
result += '1';
}
return result;
}

int  toDec(string binary)
{
int result = 0;
int flag = 1;
for (int i  = binary.size()-1; i>0; --i)
{
if (binary[0] == '0')
{
result += (binary[i]-'0') * flag;
}
else
{
result += !(binary[i]-'0') * flag;
}
flag *= 2;
}
if (binary[0] == '1')
{
result += 1;
result = -result;
}
return result;
}

int  main()
{
int num;
cout << "请输入一个整数(可以是负数): ";
cin >> num;
string binary = toBinary(num);
cout << num << "的补码是: " << binary << endl;
int dec = toDec(binary);
cout << "补码"<< binary << "对应的整数为:" << dec << endl;
}


增加一个求数字二进制表示中1的个数(同样适用于负数,即补码中1的个数)

int  NumberOf1(int n) {
int count = 0;
while (n)
{
count++;
n = n & (n-1);
}
return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 c++ 补码
相关文章推荐