bitcount java_java-Long.bitCount()如何找到设置的位数?

让我们以255为例.我们将这些位组合在一起.首先,我们从255开始,为0b1111.1111(二进制为8 1)

第一行代码是:

i = i - ((i > > > 1) & 0x5555555555555555L);

这条线正在梳理每对1.由于我们有8个1,所以我们希望组合成对,并得到2,2,2,2之类的东西.由于它是二进制文件,因此我们期望10101010.

让我们看看我> > 1.我是0b1111.1111,并且正在向下移动1,所以我们得到0b0111.1111.我们将交集&与0b0101.0101(这是从5到101的二进制数).这样做可以保留一半的位,特别是最初位于偶数位置的所有位(从我们的初始编号开始的第二,第四,第六,第八位).

然后,我们从初始值中减去此值,这有点麻烦.我们正在尝试将高位添加到低位,所以我们可以这样做:

((i > > > 1) & 0x5555) + (i & 0x5555)

左侧的术语将是高位,而右侧的术语将是低位.但是我们知道i = 2 *(最高位)1 *(最低位),因为最高位上移了1(与乘以2相同).因此,通过将最高位减去1次,我们得到了相同的结果.

好的,现在我们可以开始第二行代码了.当前,我有0b1010.1010,我们准备将每对2加起来.我们期望得到4,4(每半使用4位)或二进制0100.0100.代码是:

i = (i & 0x3333333333333333L) + ((i > > > 2) & 0x3333333333333333L);

我们得到每组4个中的前2个数字,以及后2个数字,并将它们相加. 0x3333 = 0b0011.0011.0011.0011,因此我们可以看到以3表示的相交&会使组中的后2个数字保持不变.我们首先获得底部的两个数字,然后将i移至2个点以得出顶部的2个数字.然后我们添加:0010.0010 0010.0010 = 0100.0100.完全符合预期.

接下来,我们将2组(共4组)加在一起.

i = (i + (i > > > 4)) & 0x0f0f0f0f0f0f0f0fL;

0x0f0f = 0b0000111100001111,因此,如果我们与之相交,我们将每四个数字保留一次.我们将i加到降档后的4,因此我们计算出0100.0100 0000.0100 = 0100.1000. 4 4应该返回8,并且8 = 0b1000,但是顶部的“ 4”仍然需要删除.与0f0f0f0f的交集执行此操作.

因此,现在我们有0b1000,它是8.其余步骤将更高的位相加(例如2组8个一起,而不是2组16个..),但是由于我们的数字(255)只有8位长,因??此高位全为0,因此这不会影响我们的结果.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Luogu P2463 [SDOI2008]Sandy的卡片

题目链接 \(Click\) \(Here\) 真的好麻烦啊。。事实证明,理解是理解,一定要认认真真把板子打牢,不然调锅的时候真的会很痛苦。。(最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\)) 这个题最开始我想的是\(RMQ\)遍历每一个…

java log输出到文件路径_Java - 配置log4j的日志文件路径 (附-获取当前类路径的多种方法)...

1 日志路径带来的痛点Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径.本文借鉴 Tomcat 的…

常用数据结构

字典:即map,映射,通过key>value的方式直接查找与之对应的值,实现一般是hash表或二叉树跳跃表:本质是链表,只不过将数据进行提取分层,将总数据置为底层,提取2、4、的倍数为第一二层…

java jasypt_Jasypt

软件简介Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,SpringSecurity(Acegi)来增强密码管理。Jasypt开发团队推出了Java加密工具Jasypt 1…

ZABBIX监控JAVA日志文件

最近开发人员有一个需求,监控java程序的报错日志,如日志中包含“ERROR”关键字的信息,就邮件告警,以下是具体实现方法。 一、创建模板以上是已经创建好的模板,名为“Template App Java logs”创建应用集二、创建监控项…

如何快速把音乐转成MP3格式

身边有这样一群朋友经常搞音乐,仿佛生活的乐趣只有音乐,不能也能理解,谁没有点自己的爱好呢?但是如果想要在茫茫人海中成为佼佼者,并不是这么容易的,但是我们要在速度上赢更多的人,所以写了这篇…

new URI(zk_servers_1) 路径包含下划线无法获取host的问题

spring cloud gateway使用zookeeper作为注册中心调用其它服务的时候报了下面这个错误: ava.lang.NullPointerException: nullat io.netty.util.NetUtil.isValidIpV4Address(NetUtil.java:648) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at io.netty.util.NetUt…

java ee 值范围_JAVAEE之内置对象和属性范围

内置对象和属性范围四种属性范围九个内置对象1.内置对象如果说想要使用一个对象,必须new 出来,但是在我们的jsp操作中,发现我们使用过的out,request对象没有进行实例化,类似于这样的对象,我们叫做jsp的内置对象&#x…

JavaWeb学习笔记(九)--HttpServletResponse

web服务器接收到客户端的HTTP请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象。 request和response对象既然代表请求和响应,那我们要获取客户端提交过来的数据,只需要找request对象即可。要…

java html5 上传_HTML5结合ajax实现文件上传以及进度显示

基于原生html5实现,不需要falsh支持,进度可以自定义显示,控制灵活, 本来打算使用jquery插件进行异步文件上传,比如uploadfy但是需要额外的支持,也有人用iframe模仿异步上传机制,感觉都比较别扭。…

7天玩转机器学习

7天玩转机器学习 人工智能时代,数据迎来大爆发,数据对于提升业务价值的重要性与日俱增。但面对海量数据,传统分析方法已经显得无能为力,而机器学习的成熟为企业带来了强大的分析引擎,可在众多领域帮助企业挖掘数据价值…

centos 6.5 yum java_Centos6.5 yum 安装jdk1.8

centos 6.5 安装卸载jdk-- 查看有没有预装jdk版本java -version-- 查看已安装的版本rpm -qa|grep java-- 卸载预装版本 rpm -e --nodeps 命令卸载rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64-- 查找可以安装的jdk列表yum search java | grep -i --color J…

java 中使用mongodb_mongodb在java中的使用

agg Aggregation.newAggregation(Aggregation.match(new Criteria().andOperator(Criteria.where("timeStamp").lte(TypeChange.dateToLong(times[1])).gte(TypeChange.dateToLong(times[0])),new Criteria().orOperator(ruleCr))),//筛选符合条件的记录Aggregation…

一次面试总结(记录)

1,从一个数组里找重复出现次数最多的一个数?2,常用的linux命令3.垃圾收集器有哪些 ?垃圾收集算法?4,线上服务器变慢了你是如何定位问题并处理的?5,你自己实现一个本地缓存,淘汰最久未使用,你怎么设计6,用栈实现计算器7,剔除二叉树…

java 累加 0-9 a-z_JAVA获得包含0-9、a-z、A-Z范围内字符串的的随机数实例

一、获得0-9,a-z,a-z范围的随机字符串/*** java获得0-9,a-z,a-z范围的随机数* param length 随机数长度* return string*/public static string getrandomchar(int length) {char[] chr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r,…

【PHP 扩展开发】Zephir 基础篇

上一篇 《Zephir 简介》 简单介绍了环境搭建,编写了一个的简单示例。这一篇继续介绍 Zephir 基础。 基本语法Zephir 中,每个文件都必须有且只有一个类,每个类都必须有一个命名空间,目录结构必须与所使用的类和命名空间的名称相匹配…

java常见排序算法有哪些_Java中常用的6种排序算法详细分解

排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法:1. 选择排序选择排序的基本思想是遍历数组的过程中&…

python range函数

这个函数很简单,就不写例子了,看看语法,拿来即用 python range() 函数可创建一个整数列表,一般用在 for 循环中。 函数语法 range(start, stop[, step]) 参数说明: start: 计数从 start 开始。默认是从 0 开始。例如ra…

java tomcat重启linux_Linux下tomcat重启

进入Tomcat下的bin目录cd/user/local/tomcat/bin关闭tomcat./shutdown.sh查看tomcat是否关闭ps -ef|grep java显示以下信息,则Tomcat还未关闭root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file/usr/loca…

左偏树 P3377【模板】左偏树(可并堆)

题目传送门 代码&#xff1a; /* code by: zstu wxk time: 2019/03/01 */ #include<bits/stdc.h> using namespace std; #define Fopen freopen("testdata.in","r",stdin); freopen("_out.txt","w",stdout); #define LL long lo…