【发布时间】:2020-04-19 19:17:45
【问题描述】:
下面的 sn-p 是我们在 svelte 应用程序上执行 npm run dev 时生成的。
function make_dirty(component, i) {
if (component.$$.dirty[0] === -1) {
dirty_components.push(component);
schedule_update();
component.$$.dirty.fill(0);
}
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
}
谁能解释一下下面的语句发生了什么?为什么数字 31 是硬编码的?
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
谢谢
【问题讨论】:
-
@RobertHarvey 感谢您的提示。但是你能详细说明一下吗?
-
表达式
(i / 31) | 0相当于一个简单的整数除法。表达式1 << (i % 31)在索引i指定的每个位中产生一个1。例如,i = 0产生1二进制,i = 1产生10二进制,i = 2产生100二进制,等等。
标签: javascript bit-manipulation bit-shift svelte-3