15_二进制中1的个数
2020-05-19 本文已影响0人
是新来的啊强呀
要求:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:把1的二进制数每次往左移一位,
public static int NumberOfOne(int number){
int cout = 0;
int flag = 1;
while(flag!=0){
if((flag&number)!=0){
// 进行与运算
cout++;
}
flag = flag<<1; // 左移一位
}
return cout;
}
位运算相关知识:
1、左移运算m<<n表示把m左移n位,在左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n个0
2、右移运算m>>n表示有移n位,最右边的n位将被丢弃,若数字是一个无符号数值,则用0填补最左边的n位,若有符号,则符号位填补,即最左边补n个1。
3、把整数右移一位和把整数除二在数学上是等价的,但除法的效率更低
4、正数的补码,原码,反码数一致的。
5、负数的补码是反码加一,反码是原码按位取反,只是最高位不变(符号位)
6、计算机运行时基于补码的
7、负数的补码为模减去该数的绝对值(如,-5的补码为256-5=251=>11111011)