【发布时间】:2015-09-23 07:57:38
【问题描述】:
查看 int 44 — 我需要二进制位置的 Math.CEIL (log(2) 44) 来表示 44。
(答案是 6 个位置)
6 个地方:
___ ___ ___ ___ ___ ___
32 16 8 4 2 1
但是我如何检查(例如)8 的位是否被检查?
一个简单的解决方案是:
((1<<3) & 44)>0 所以这将检查该位是否已设置。
但请注意,计算机在幕后将44 转换为其二进制表示,并通过按位运算检查是否设置了位。
另一种解决方案是自己通过toString(2) 或mod%2 在循环中构建二进制文件
问题
数学上通过哪个公式,我可以测试是否设置了n'th 位?
(我更喜欢非循环操作,但更喜欢纯单一的数学短语)
【问题讨论】:
-
数学上,没有勺子——嗯,我是说比特。
-
@RoyiNamir,但是按位运算有什么问题?为什么要避免它?
-
:) 但仍然——“计算机将 44 转换为其二进制表示,并检查是否通过按位运算设置了位”,不,这是混合隐喻(或者可能只是技术)。 “第 n 位”是按位运算。这与检查大十进制数(以及任何其他基数)中的“第 n 个小数”的值相同。我很确定你会在某个地方需要像 mod 和 div 这样的东西。
-
任何提示为什么你不想要二进制操作?这是对位进行操作的最有效方式(比
toString或%更有效)。或者,您可以使用log,您显然知道。 -
@Amadan 我正在构建一个类似生成器的 tinyURL,所以我有
abc..ABC...0..9这是 26+26+10 这是 62 个选项,所以它的基数是 62。现在,在我有要编码的数字之后( 44) 我有名额。但现在遍历每个地方我需要知道是否有 vlue 以及价值是什么
标签: javascript math bit-manipulation