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

    #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]='';
    
        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;
    }
  • 相关阅读:
    P3146 [USACO16OPEN]248
    P2590 [ZJOI2008]树的统计
    P3379 【模板】最近公共祖先(LCA)
    P2253 好一个一中腰鼓!
    数组中出现次数超过一半的数字
    字符串的排列
    二叉搜索树与双向链表
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
    顺时针打印矩阵
  • 原文地址:https://www.cnblogs.com/yangjiannr/p/7391353.html
Copyright © 2011-2022 走看看