#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#include 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;}