int abs(int number)函数有感: 求补码和通过补码求对应的整数 C++(增加:数字的二进制表示中1的个数)
2017-03-12 16:06
369 查看
#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; }
相关文章推荐
- 随机生成一个1~100之间的整数,玩家可以通过函数InputBox命令输入数字来猜测那未知的随机数字
- 编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数,负整数)
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- Java版,如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列12345是某栈的压入顺序,序列45321为该压栈序列对应弹出顺序。
- 求一个十进制正整数在二进制表示中的二进制数字个数
- 从键盘输入某个十进制小数或整数,转换成对应的二进制小数并输出。 (查询十进制小数转换成二进制小数的算法,使用循环来实现。 最多保留小数位后7位数字即可)算法
- 【C语言】编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)
- 【C++专题】数值二进制表示、补码、反码、有符号数、无符号数、小数、有符号数的扩展
- 编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数) 例如:“12“ 返回12 “-123“ 返回-123 函数原型:int my_atoi(char *str) {}
- ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
- 金山笔试题 "写一个函数,对给定整数的二进制表示进行描述"
- 编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)
- 【C语言】编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)。
- C++通过自定义函数找出一个整数数组中第二大数的方法
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- C++ 算法之 输入两个整数m n,求计算需要改变m的二进制表示中的多少位才能得到n