博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
int abs(int number)函数有感: 求补码和通过补码求对应的整数 C++(增加:数字的二进制表示中1的个数)...
阅读量:4984 次
发布时间:2019-06-12

本文共 1456 字,大约阅读时间需要 4 分钟。

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

转载于:https://www.cnblogs.com/yangjiannr/p/7391353.html

你可能感兴趣的文章
软件工程——理论、方法与实践⑦
查看>>
批处理实现多线程执行命令列表文件
查看>>
跟牛牛老师学习python自动化的第六天
查看>>
Vim 加 Gmail 变身 Vmail
查看>>
(5) Orchard 开发之 Localization and NullLocalizer
查看>>
分类算法(1)--KNN
查看>>
ajax等待请求
查看>>
Java学习之equals和hashcode的关系
查看>>
一页纸商业计划书 (Business Plan) 模板(转载)
查看>>
什么是html
查看>>
妙用python之编码转换
查看>>
hdu 4451 Dressing 衣服裤子鞋 简单容斥
查看>>
TTTTTTTTTTTT Gym 100818B Tree of Almost Clean Money 树连剖分+BIT 模板题
查看>>
linux一些基本常识(四)
查看>>
Docker架构
查看>>
C#设计模式(3)——工厂方法模式
查看>>
过目不忘JS正则表达式
查看>>
bzoj1009: [HNOI2008]GT考试 ac自动机+矩阵快速幂
查看>>
Colidity-- StoneWall
查看>>
Leetcode 904. Fruit Into Baskets
查看>>