与运算
与运算
- " >>>" 无符号右移 ">>" 有符号右移
- 区别:无符号右移会给最高位补上0,而有符号右移则看原来最高位是啥,就补上啥。
- 右移一位相当于除以21,右移两位相当于除以22
- 一个数字 & 1,则取这个数的二进制最后一位。& 15 ,则取这个数字二进制的最后4位
- 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。
文章图片
高效运算.PNG
/**
* 取一个数字二进制的最后一位,则&1;
如果要取4位,则&15;
即(2的N次-1)
* 例如把9表示成二进制是1001 ,有2位是1. 因此如果输入9,该出2。
* >>>代表无符号右移,最高位补为0。>>有符号的右移,最高位补上原来的最高位
*
* @author xhq
*
*/
public class N10 {public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(function1(9));
System.out.println(function2(9));
}public static int function1(int n) {
// int型,在java中占32个字节,运行32次。这样包括负数。
// 每次运算,将末尾的一个数字移除
int result = 0;
for (int i = 0;
i < 32;
i++) {
if ((n & 1) == 1)
result++;
n = n >>> 1;
}
return result;
}public static int function2(int n) {//把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。
//那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作
int result = 0;
while (n > 0) {
result++;
n = n & (n - 1);
}
return result;
}}
参考
【与运算】二进制中1的个数
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越