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

    xiaoxiao2021-03-25  71

    #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; }
    转载请注明原文地址: https://ju.6miu.com/read-34482.html

    最新回复(0)