- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代码:
(defn BitScanReverse [^Long bit-board]
(loop [value bit-board r 0]
(cond
(> value 0x00000000FFFFFFFF) (recur (unsigned-bit-shift-right value 32) (+ r 32))
(> value 0x000000000000FFFF) (recur (unsigned-bit-shift-right value 16) (+ r 16))
(> value 0x00000000000000FF) (recur (unsigned-bit-shift-right value 8) (+ r 8))
(> value 0x000000000000000F) (recur (unsigned-bit-shift-right value 4) (+ r 4))
(> value 0x0000000000000003) (recur (unsigned-bit-shift-right value 2) (+ r 2))
(> value 0x0000000000000001) (recur (unsigned-bit-shift-right value 1) (+ r 1))
:else r)))
它返回位板中找到的最后一位的索引。问题是当我尝试运行时:(BitScanReverse 18446462598732840960) ;;预计 63。它给了我:IllegalArgumentException 长值超出范围:18446462598732840960 clojure.lang.RT.longCast (RT.java:1134)
这个位板是黑子的初始位置。问题是 long 在 clojure 中是有符号的(在 java 中也是如此)。我尝试过使用 BigInt,但它不允许位操作。
有什么建议吗?
最佳答案
这是一个使用位测试且无循环的反向扫描的快速且非常肮脏的实现,这可能会或可能不会更有效。
(defn rev-test [^long n ^long x] (bit-test x n))
(defn BitScanReverse [^long bit-board](condp rev-test bit-board
0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,10 10,11 11,12 12,13 13,14 14,15 15,16 16,17 17,18 18,19 19,20 20,21 21,22 22,23 23,24 24,25 25,26 26,27 27,28 28,29 29,30 30,31 31,32 32,33 33,34 34,35 35,36 36,37 37,38 38,39 39,40 40,41 41,42 42,43 43,44 44,45 45,46 46,47 47,48 48,49 49,50 50,51 51,52 52,53 53,54 54,55 55,56 56,57 57,58 58,59 59,60 60,61 61,62 62,63 63))
这将最低有效位视为 0,就像位测试和 0 索引数组一样,所以我认为它与您的实现不同。在生成输入时,带正号文字的长度将被限制为 63 位,但您仍然可以使用符号位作为第 64 位。尝试创建一个辅助方法来构造您需要的具有稍高抽象级别的数字,例如这个 fn ,它将最高有效的 32 位和最低有效的 32 位作为两个参数。这可能可以写成一个宏,但我没有足够的经验来编写一个宏并确保它能够工作。
(defn bitboard [^long upper ^long lower]
(bit-or (bit-shift-left upper 32)
(bit-and lower 0xffffffff)))
对于性能来说,重要的是,^Long 被装箱,并且我认为 ^long 在正确的情况下可能不会被装箱。数字基元数组是我发现的少数情况之一,其中基元确实是 JVM 上应有的样子(字节数组始终是字节数组,具有连续的 8 位内存块,但由于对齐优化,单独声明的字节即使在 Java 中也可能占用超过 8 位的内存)。我强烈推荐 ztellman 的 primitive-math用于查找 Clojure 中的数学需要反射的情况的库,这种情况出现的频率令人惊讶,并且对于像这样的位操作代码非常重要。
关于java - 如何在 Clojure 的位运算中使用无符号 64 位变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28786376/
给定一个字符串,例如 s="##$$$#",我如何找到索引之前的“#”符号数等于“”数的索引$"符号在索引之后? 示例:如果 s="##$$$#",则输出将为 2。 解释:在索引 2 之前我们有 2
在本教程中,您将借助示例了解 JavaScript 符号。 JavaScript 符号 JavaScript ES6 引入了一种新的原始数据类型,称为 Symbol(符号)。符号是不可变的(不能更改)
在“函数编程的工艺”一书中,符号 '>.>' 将函数连接在一起,与 '.' 的方向相反。但是当我使用 ghci 实现它时,它显示了超出范围的错误 '>.>'。为什么?它是不再使用的旧符号吗? 最佳答案
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我需要从向量中删除 \"。这是我的数据: data <- c("\"https://click.linksynergy.com/link?id=RUxZriH*PWc&offerid=323058.1
我在 Nginx 配置中使用正则表达式来捕获文件 URL,但如果文件 URL 包含 # 符号,正则表达式模式将不会捕获它。 这里是nginx的配置部分。 location ~ ^/p/(?[\w\-=
如何使 & 符号在此图表的第一组条形/列下正确显示: http://jsfiddle.net/VxbrK/2/ 应该是“Apples & Oranges”而不是“Apples & Oranges”。
**在verilog中是什么意思? 我为测试台提供了以下逻辑 localparam NUM_INPUT_BITS = 1; localparam NUM_OUTPUT_BITS
我有一个使用正则表达式来验证电子邮件地址的方法。 public String searchFormail(String searchWord) { Pattern pattern = Patt
我想将一个字符串拆分为数字部分和文本/符号部分我当前的代码不包含负数或小数,并且表现得很奇怪,在输出的末尾添加了一个空列表元素 import re mystring = 'AD%5(6ag 0.33-
我有一些代码需要从数组中选择一个随机字符串,但它一直返回单个字母或数字。如何解决这个问题? var name = ["Yayek", "Vozarut", "Gezex",
我刚开始使用 Python,我在考虑应该使用哪种表示法。我读过 PEP 8关于 Python 符号的指南,我同意那里的大多数内容,除了函数名称(我更喜欢混合大小写风格)。 在 C++ 中,我使用匈牙利
在用 C# 编写代码时,我错误地在 if 语句中的变量前添加了一个符号(而不是感叹号)。 bool b = false; if (@b) { } 我很惊讶它编译成功,没有任何错误。 我想知道:上面的代
本文实例为大家分享了特殊字符替换电话号码中某一部分的方法,ios利用-号替换电话号码中间四位,供大家参考,具体内容如下 1、效果图 2、代码 rootviewcontroll
当我使用“x”和“z”作为符号时,这段代码没有问题: from sympy import * x, z = symbols('x z') y = -6*x**2 + 2*x*z**0.5 + 50*x
我需要从文本中删除标点符号: data <- "Type the command AT&W enter. in order to save the new protocol on modem;"
我有几个数字是 numeric 类。下面的例子。 df = c(12974,12412,124124,124124,34543,4576547,32235) 现在我想在每个数字前添加 '$' 符号而不
我有一个 highcharts 图例,其中符号以不同的大小显示,因为它们在实际图表中的大小不同。不幸的是,当数据点的大小增加时,它们也会在图例中增加。无论数据点大小如何,我都希望图例符号保持相同的大小
我需要使用包含平均值+-SD的标题。到目前为止,我只能得到以下信息: "Mean +- SD or N (%)" [1] "Mean +- SD or N (%)" 如何直接使用“+-”符号?您知道一
使用 XSLT 和 XPath 1.0,我有一个要转义的字符串以用于 URL,例如: one word & another 因此,描述元素的 text() 应该进行 URL 转义。 我该怎么做
我是一名优秀的程序员,十分优秀!