如何知道一个十位数的二进制有多少个1

按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;
逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。

x=9999

int func(x) 

    int countx = 0; 
    while(x) 
    { 
          countx ++; 
          x = x&(x-1); 
     } 
    return countx; 
}

x = 9999 时,x-1=9998,用二进制表示

10011100001111

10011100001110

当他们执行&运算并赋值给x,结果x为

10011100001110

此时x-1为

10011100001101

当他们执行&运算并赋值给x,结果x为

10011100001100

如此类推到结果为00000000000000,应该发现x = x&(x-1)就是将x最右边的二进制位1变为0。x为9999时二进制为1的位有8个,所以结果为8

时间: 2024-07-30 12:18:58

如何知道一个十位数的二进制有多少个1的相关文章

用1,2,3,4四个数字随意搭配组成一个三位数且两两互不相同,一共有几种搭配方式并输出

1 public class ZuHe{//1 2 3 4随意组合为一个三位数问一共有多少种组合方式,且三个数字互不相同 2 public static void main(String[] args){ 3 int x=0; 4 for(int i =1;i<=4;i++){ 5 for(int j=1;j<=4;j++){ 6 int k=1; 7 while(k<=4){ 8 int s=i*100+j*10+k; 9 if(s/100!=s/10%10&&s/10

[转]趣题:一个n位数平均有多少个单调区间?---- From Matrix67

考虑这么一个 14 位数 02565413989732 ,如图所示,它的数字先逐渐变大,然后开始变小,再变大,再变小,再变大,再变小.我们就说,它一共包含了 6 个单调区间.我们的问题就是:一个 n 位数平均有多少个单调区间?为了避免歧义,我们假设任意两位相邻的数字都不相同,因而像 77765589911 这样的数我们就不考虑了.另外,大家可能已经注意到了,我们允许这个 n 位数以数字 0 开头.因而,更精确地说,我们的问题是:相邻数字都不相同的.允许以 0 开头的所有 n 位数当中,平均有多少

C语言之函数调用02—一个三位数的正整数=它的各位数字的阶乘之和

//函数调用+枚举法 /* ========================================================== 题目:求一个三位数的正整数=它的各位数字的阶乘之和! 如:145=1!+4!+5!. ========================================================== */ #include<stdio.h> int J(int n) { int t=1,i; for(i=1;i<=n;i++) t*=i;

[转帖]期待下一个十年|CIS 2019温馨回顾(附PPT下载)

期待下一个十年|CIS 2019温馨回顾(附PPT下载) https://www.freebuf.com/fevents/222236.html shidongqi2019-12-06共26587人围观 ,发现 4 个不明物体活动 距离CIS 2019网络安全创新大会结束已经过去了整整一周的时间,FreeBuf网站评论.私信.微博.微信公众平台……涌现出大量询问PPT下载链接,看到那么多求知若渴的小伙伴,笔者已经来不及一一去回复,只能去加紧催促嘉宾PPT脱敏情况,所以这里先奉上CIS大会PPT下

一个5位数,判断它是不是回文数

题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 1 package com.li.FiftyAlgorthm; 2 3 import java.util.Scanner; 4 5 /** 6 * 题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 7 * @author yejin 8 */ 9 public class Palindrom { 10 public static void main(Strin

输入任意一个5位数,判断其是否是回文数

输入任意一个5位数,判断其是否是回文数.所谓的回文数是指其个位与万位相同,并且十位与千位相同,比如:12321或者54645: #include <stdio.h>void main(){   int n=0;    printf("请输入任意一个5位数\n");    scanf("%d",&n);   n%10==n/10000&&(n/10)%10==(n/1000)%10 ? printf("%n是一个回文数&q

打印出所有的&quot;水仙花数&quot;,所谓&quot;水仙花数&quot;是指一个三位数,其各位数字立方和等于该数本身。

package com.mumu.ready; public class Daffodils { // 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. // 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. public static void main(String[] args) { for (int i = 100; i < 1000; i++) { in

输入任意一个5位数,判断其是否是回文数。

#include <stdio.h>void main(){ int a; printf("请输入一个5位数"); scanf("%d",&a); (a/10000==a%10&&(a/1000)%10==(a/10)%10)?printf("是回文数\n"):printf("不是回文数\n");} 输入任意一个5位数,判断其是否是回文数.,布布扣,bubuko.com

打印出所有&quot;水仙花数&quot;,所谓&quot;水仙花数&quot;是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。

题目描述 打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身. 例如:153是一个水仙花数,因为153=1^3+5^3+3^3. Output: 153 ??? ??? ??? 输入 无 输出 所有的水仙花数,从小的开始. 每行一个 样例输入 无 样例输出 无 程序:#include<stdio.h>int main(){    int i,a,b,c;    for(i=100;i<1000;i++)    {