You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BitSet.valueOf在fromString方法中的作用及代码解析

详解BitSet.valueOf(new long[] { Long.parseLong(s, 2) })的功能

嘿,我来帮你把这行代码拆解得明明白白的!咱们从内到外一步步看,再结合你给的完整示例来理解它的作用:

1. 拆解代码的每一部分

  • Long.parseLong(s, 2):这部分的作用是把二进制字符串 s 转换成 long 类型的数值。比如你示例里的 "1000001",用这个方法转换后,得到的是十进制的 65(对应的二进制就是 1000001)。第二个参数2指定了解析的进制是二进制。
  • new long[] { ... }:把刚才得到的long值放到一个长度为1的数组里——因为BitSet.valueOf()方法需要接收一个long数组作为输入参数。
  • BitSet.valueOf(...):这是BitSet的静态工厂方法,它会根据传入的long数组来创建一个BitSet实例。数组里每个long的每一位,都会对应到BitSet中的一个位:long的最低位(第0位)对应BitSet的索引0,long的第1位对应BitSet的索引1,以此类推。

2. 结合示例代码理解实际作用

在你的示例里,fromString方法就是用这行代码把二进制字符串转成BitSet:

  • 当输入是"1000001"时,Long.parseLong得到65(二进制1000001),然后BitSet.valueOf会创建一个BitSet,其中索引0和索引6的位是1(对应二进制字符串的最右边和最左边的1),其他位默认是0。
  • 示例里的toString方法刚好是反向操作:用bs.toLongArray()[0]把BitSet转成long值,再用Long.toString(...,2)转回二进制字符串,这样就能还原出原来的输入。

3. 为什么要这么做?

BitSet是Java里专门用来高效处理位操作的工具类,比直接用字符串处理位运算要高效得多。比如示例里的bits2.and(bits1),就是对两个BitSet执行按位与操作,对应到二进制字符串就是"1111111" & "1000001" = "1000001",结果完全符合预期。

这里要注意一个小细节:如果你的二进制字符串长度超过64位(long的最大位数),那就要用更长的long数组来处理,但你的示例里都是短字符串,所以用长度为1的数组就足够了。

内容的提问来源于stack exchange,提问作者learner101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:39:23