标签:0000 二进制 32 sum 个数 1111 int
二进制中1的个数
题目链接
题目描述
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
数据范围:- 2^{31} <= n <= 2^{31}-1−231<=n<=231−1
即范围为: -2147483648<= n <= 2147483647−2147483648<=n<=2147483647
实例1
输入:
10
返回值:
2
说明:
十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1。
实例2
输入:
-1
返回值:
32
说明:
负数使用补码表示 ,-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111,其中32个1
题目分析
第一种解法:使用包装类型的方法
public static int numberOf1(int n) {
//转为二进制字符串
String s = Integer.toBinaryString(n);
int sum = 0;
for (int i = 0; i < s.length(); i++) {
//比较
if(s.charAt(i) == '1') {
sum++;
}
}
return sum;
}
第二种解法:用&符号进行比较 两个数为1则为1,否则为0 例如:十进制 10 = 二进制 1010 、 十进制 9 = 二进制 1001 用&符号就得 1000
public static int numberOf1Two(int n) {
int sum = 0;
while (n != 0) {
++sum;
//二进制 & 两数为1才是1,否则为0
n = n & (n - 1);
}
return sum;
}
标签:0000,二进制,32,sum,个数,1111,int 来源: https://www.cnblogs.com/congratulations/p/15788315.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。