关于"位操作"有没有什么中文文档啊?
来源:4-10 -reactor线程任务的执行

南国漂泊
2018-07-17
io.netty.util.concurrent.SingleThreadEventExecutor
// Check timeout every 64 tasks because nanoTime() is relatively expensive. // XXX: Hard-coded value - will make it configurable if it is really a problem. if ((runTasks & 0x3F) == 0) { lastExecutionTime = ScheduledFutureTask.nanoTime(); if (lastExecutionTime >= deadline) { break; } }
if ((runTasks & 0x3F) == 0) {
经常看到这种位操作,但是理解起来很困难,老师,同学们有没有什么好的文档推荐啊?!
感谢闪电侠老师提供的链接 java二进制相关基础 - 微信 ,这篇文章让我受益良多,特别是老师说的把数字二进制展开,画一画,非常实用。我以 0x3f 为关键字在百度搜索也得到了一些启示,链接列在文末。加上之前收藏的英文链接也一并列在文末。
long runTasks = 0; runTasks ++; if ((runTasks & 0x3F) == 0) { long : 64bit, 表示64bit太长了,所以高位省略……(高位?对不对?) 0x3f : 16进制 > 0011 1111 < 63 ^ ^ 3 f 0100 0000 < 64 ^ ^ 4 0 0100 0001 < 65 ^ ^ 4 1 a & b : 按位与, 只有a,b都为1, a&b才为1; 否则为0 按照上面的图示, a & 0x3f , 当 a 的低6位为0时, a & 0x3f 的结果为 0 满足 a & 0x3f == 0 的最小的 a 为 64, a = 65就不满足了, 必须是64的倍数 这样 if (a & 0x3f == 0) {...} 实际上是相当于 if (a % 64 == 0) {...} 那是否说明只要是求余就可以用上面表达方式替换呢? 答案是否定的,必须是 2 的N次方 才能这样使用, 我们自己还是老实的使用`%`比较好 a : 0011 < 3 b : 0011 a & b : 0011 < 不等于0 a : 0110 < 6 = 2*N b : 0011 a & b : 0010 < 不等于0 a : 1000 < 8 = 2^N b : 0111 < 7 a & b : 0000 < 等于0
一开始我写的是 "2 的倍数" ,后来思考了一下发现有问题,因为 6 是 2 的倍数但是不满足条件,所以我将 "2 的倍数" 改为 "2 的N次方" ,然后,过了一段时间,我开始怀疑是否要将 "64的倍数" 改为 "64的N次方",我以 4 为例在纸上画了一遍发现,不用改。现在把过程附上。
a : 0000 0100 < 4 b : 0000 0011 < 3 a & b : 0000 0000 a : 0000 1000 < 8 a : 0000 1100 < 12 a : 0001 0000 < 16 a : 0001 0100 < 20 a : 0001 1000 < 24 a : 0001 1100 < 28 a : 0010 0000 < 32
吐槽一下慕课问答区:我在编辑器特意以空格(非tab)排好了位置,复制到这里就“格式乱了”,我好不容易在这里又一次的输入了空格排好位置,预览时发现“格式不对”,我…… 好累啊,不知为何不使用markdown编辑器?!!!
[类似于0x3F是什么意思?怎么转换?](https://zhidao.baidu.com/question/454647025860717045.html)
[c语言&0x3f 为什么就是等于除于64求余数](https://zhidao.baidu.com/question/460892986.html)
https://www.geeksforgeeks.org/bitwise-algorithms/#basics
https://leetcode.com/tag/bit-manipulation/
3、4是英文的,我没看懂,也不打算现在这个阶段去阅读了,有兴趣有能力的同学可以前去研究。
1回答
-
只要记住几个位操作符,然后刚开始如果看不懂,可以把数字二进制展开,画一画就行,然后这里有一个资料可以看看:https://mp.weixin.qq.com/s/AIvthkKEqacnfZBIZAxSKA,这个公众号强烈建议关注一下,干货很多!
032018-07-19
相似问题