+ 1

Pls help with code coach Number of ones

Please explain what's happening in this code and also if there is any other alternative besides this code. import java.util.Scanner; class countSetBits { static int countSetBits(int n) { int count = 0; while (n > 0) { count += n & 1; n >>= 1; } return count; } public static void main(String args[]) { Scanner s = new Scanner(System.in); int i = s.nextInt(); System.out.println(countSetBits(i)); } }

23rd Nov 2022, 9:29 AM
Devishree
Devishree - avatar
5 Answers
+ 1
Devishree n & 1 returns the last bit binary value of the number n . See for example : 5 => 101 => 5&1 returns 1 4 => 100 => 4&1 return 0 If you observe that even numbers will have 0 at right most bit. Odd numbers will have 1 as right most bit of binary value. So this is logic to determine if the number is even or odd by bitwise-and '&' operator. 5 & 1 => 101 001 ___ 001 4&1 => 100 001 ___ 000 count += n&1; here 'count' will have odd numbers count. n >>= 1 is bit wise right shift operator, will shift 1 bit to it's right position in binary places so actually it's equal to n=n/2 ; So example input 10 => 10&1 => 0 , n=10/2 => 5 5&1=> 1 , n= 5/2 => 2 2&1 => 0 , n= 2/2 => 1 1&1=> 1 , n= 1/2 => 0 Loop gets terminated as n >0 false. Count will have value 2, will ne returned.. Hope it helps.... if there any other issues, you can reply..
23rd Nov 2022, 11:19 AM
Jayakrishna 🇮🇳
+ 3
In C#, you may find it easy static void Main() { int n = Convert.ToInt32(Console.ReadLine()); string binary = Convert.ToString(n, 2); Console.WriteLine(binary); Console.WriteLine(binary.Count(x => x == '1')); }
17th Mar 2023, 7:34 AM
GURURAJ KL
GURURAJ KL - avatar
+ 1
Add details about task or description..
23rd Nov 2022, 9:33 AM
Jayakrishna 🇮🇳
+ 1
Jayakrishna🇮🇳 Done. I have added the code.
23rd Nov 2022, 9:43 AM
Devishree
Devishree - avatar
+ 1
Jayakrishna🇮🇳 I have understood... Thank you 😊
23rd Nov 2022, 11:30 AM
Devishree
Devishree - avatar