题解 | #求int型正整数在内存中存储时1的个数#
求int型正整数在内存中存储时1的个数
https://www.nowcoder.com/practice/440f16e490a0404786865e99c6ad91c9
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int number = in.nextInt(); int count = 0; while(number != 0){ ++count; number = ( number - 1 ) & number; } System.out.print(count); } }
本题主要考察位运算。需要发现一个规律就是:将一个整数减去1, 然后与整数做与运算,那么会将该整数最右边的1变成0。这里举一个例子,比如12对应的二进制数为1100,将12减1,得到11二进制数1011,然后将1100与1011做与运算,得到1000,这样,1100最右边的1就变成了0。因此,我们只需要重复这个操作,直到将这个整数的所有位都变成0,没处理一次就表示整数对应的二进制数有1,可以进行记录。最后输出1的个数即可。