C程序:确定一个整数的计算机内部表示中有几个"1"
2010-04-21 09:33
239 查看
/* 注意不断右移判断最低位是1有多少个的算法是错误的, 因为根据GNU C/C++的实现来看,负数是带符号填充进行右移的,所以如果是负数,该算法会死循环。 变通办法:Java可以用>>>逻辑右移位操作符,C/C++可以强制转换成无符号整数再处理 下面的程序是正解。其中num &= (num - 1) 会消除num的最小位置的"1" */ #include <stdio.h> int numOnesInBinary(int num) { int numOnes = 0; while (num != 0) { num &= (num - 1); numOnes++; } return numOnes; } int main() { printf("%d", numOnesInBinary(-1)); return 0; }
相关文章推荐
- 确定一个整数的计算机内部表示中有几个"1"
- 确定一个整数的2进制中有几个bit"1"写法
- 对于一个字节(8bit)的变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能地高。
- 有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。
- 网易笔试题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
- 编写一个程序,对于小于1000的正整数,通过实验确定期望产生多少个数才能使得每个数至少出现一次。
- 从易到难编写C++程序,(4)问题:实现一个大整数表示的BigInt类
- 度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
- chonggou----Martin Flower在《重构》中有一句经典的话:"任何一个傻瓜都能写出计算机 可以理解的程序,只有写出人类 容易理解的程序才是优秀的程序员。"
- 第20题: 题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。 例如输入字符串"345",则输出整数345。
- 一个正整数有可能可以被表示为 m(m>=2) 个连续正整数之和,编写一个程序,输入一个正整数,然后找出符合这种要求的所有 连续正整数序列,若不存在这种序列,则打印None。
- 输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345
- 计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.
- 编写一个程序,对于小于1000的正整数,通过实验确定期望产生多少个数才能出现重复。
- 金山笔试题 "写一个函数,对给定整数的二进制表示进行描述"
- 有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数
- 尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题。现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示同一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示时为三位数1、7、3。按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11。
- 编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列
- 求一个数据,二进制表示中"1"的个数