负数用32位的补码表示
正数:原码==反码==补码
负数:反码:原码符号位不变,其余位取反;补码:反码加1
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例1
输入
复制
10
讯享网
返回值
复制
讯享网2
第一种流氓解法
借助Integer.toBinaryString(n)转换为二进制字符串
public int NumberOf1(int n) { //负数用补码表示 // 1、首先求出负数的原码,如-8的原码为 1000 1000, // 2、通过原码求出它的反码,负数的反码就是 除符号为以外,其余的全部求反,如-8 反码为 1111 0111, // 3、负数的补码 +1,就是它的补码,如 -8 的补码为 1111 1000 // // 总结 一句话就是 负数的补码是在原码的基础上除符号位外其余位取反后+1 String s=Integer.toBinaryString(n); int num=0; for(int i=0;i<s.length();i++){ if(s.substring(i,i+1).equalsIgnoreCase("1")){ num+=1; } } return num; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/74823.html