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]='\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;
}
int abs(int number)函数有感: 求补码和通过补码求对应的整数 C++(增加:数字的二进制表示中1的个数)的更多相关文章
- 剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
1. 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 2. 思路和方法 使用移位(<<)和 “| & !”操作来实现.1的二进制是:前面都是0,最后一位 ...
- [LeetCode] Prime Number of Set Bits in Binary Representation 二进制表示中的非零位个数为质数
Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime ...
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
思路:利用&用算加右移的方法来提取二进制中的每一位数,然后进行比较,查看是否相同. #include<stdio.h> #include<stdlib.h> int m ...
- 转:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数
转:http://toutiao.com/a4280977370/ [解法一] 可以举一个八位的二进制例子来进行分析.对于二进制操作,我们知道,除以一个 2,原来的数字将会减少一个0.如果除的过程中有 ...
- [Swift]LeetCode762. 二进制表示中质数个计算置位 | Prime Number of Set Bits in Binary Representation
Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime ...
- Leetcode762.Prime Number of Set Bits in Binary Representation二进制表示中质数个计算置位
给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数. (注意,计算置位代表二进制表示中1的个数.例如 21 的二进制表示 10101 有 3 个计算置位.还有, ...
- 75 int类型数组中除了一个数出现一次或两次以外,其他数都出现三次,求这个数。[2行核心代码]
[本文链接] http://www.cnblogs.com/hellogiser/p/single-number-of-array-with-other-three-times.html [题目] i ...
- CString转换成int CString类相应函数
CString 型转化成 int 型 把 CString 类型的数据转化成整数类型最简单的方法就是使用标准的字符串到整数转换例程. 虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个 ...
- 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl
因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...
随机推荐
- SQLite 使用技巧
http://blog.csdn.net/beifengdelei/article/details/7166056 SQLite自增ID自段使用方法为 INTEGER PRIMARY KEY AUTO ...
- java以流的形式输出文件
原文:http://blog.csdn.net/liutt55/article/details/78126614 public void downProcessFile(HttpServletRequ ...
- Oracle里面的用户user无法登录 LOCKED(TIMED)
SQL>conn test/test 还是报同样的错误,这就奇怪了.看看dba_users中该用户的状态等信息 SQL>select account_status,lock_date,pr ...
- Python+C混编
Python最慢!C最快!Python+C混编?结果可想而知! 樱桃种子 百家号04-1712:11 共享库 使用C语言编译产生共享库,然后python使用ctype库里的cdll来打开共享库. 举例 ...
- uCOS-ii笔记
ucos ii system 文件结构 上层: 应用软件,用户代码 中层: 与处理器无关代码 与应用程序相关配置文件 与处理器有关代码 下层: 硬件(cpu,interupt,timer,gpio,i ...
- javascript字符串处理方法
字符串处理方法 1.字符串合并操作:“ + ”2.parseInt() 将数字字符串转化为整数3.parseFloat() 将数字字符串转化为小数4.split() 把一个字符串分隔成字符串组成的数组 ...
- 警惕rapidxml的陷阱(二):在Android上默认内存池分配数组过大,容易导致栈溢出
上一篇随笔中提到了,rapidxml在每个xml对象中维护了一个内存池,自己管理变量的生存周期.看起来很好,但我们在实际使用中还是出现了问题. 项目中我们的模块很快写好了,在windows和linux ...
- Gitlab备份、迁移、恢复和升级
Gitlab备份.迁移.恢复和升级 自建的Gitlab服务器常常会因为使用时间的增长,其空间容量等硬件需求都需要升级,或者迁移至更高配置的服务器上.备份.迁移.恢复.升级过程如下 1.gitlab备份 ...
- 转:http2基本中文翻译
https://github.com/fex-team/http2-spec/blob/master/HTTP2%E4%B8%AD%E8%8B%B1%E5%AF%B9%E7%85%A7%E7%89%8 ...
- scrollBy 相对滚动
scrollBy可以相对当前位置移动滚动条,而不是移动到绝对位置 scrollBy(0, 100); // 滚动条下移100px