我该如何在Standard ML中检查一个整数的二进制表示?

3

我正在尝试在SML中实现一个重复平方算法,希望它是尾递归的。

目标是乘以所有x^k,其中k为2^m,且2^m是n的二进制表示中的1。

例如,对于x^25,计算x^1 * x^8 * x^16,因为16 + 8 + 1 = 25。

我不知道如何用其二进制部分表示数字,或者使用位运算手动检查(因为据我所知SML没有位运算)。

我更喜欢使用SML的开箱即用库,因此不导入其他库。

这是一个作业问题,如果您能回答而不完全暴露答案,那就太好了。

编辑:我正在使用SML of New Jersey。


1
虽然SML没有任何位运算符,但是SML基础库确实有一个“基本类型”,其中包含执行位运算的函数。 - matt
你能告诉我在哪里找到按位与运算符吗? - David Crosby
1
当然,如果我之前表达不够清晰,很抱歉。http://sml-family.org/Basis/word.html#SIG:WORD.andb:VAL - matt
谢谢!如果可能的话,你能给我一个使用andb的例子吗?我一直在尝试在sml终端中使用它,但我尝试的所有语法可能性都不起作用。 - David Crosby
1
在smlnj中,这对我有效:Word.andb(Word.fromInt(1), Word.fromInt(0));你可以始终“打开Word”,以避免需要用Word作为前缀。 - matt
显示剩余2条评论
1个回答

1

感谢matt,我找到了解决方案。

使用SML基础库中的Word类型,我使用了:

Word.andb(Word.fromInt(x), Word.fromInt(y)) > Word.fromInt(0)


2
这不是一个答案。在投票者出现之前,您应该将其删除。 - molbdnilo
我添加这个是因为我想将其标记为已解决,但似乎需要等待2天。我会编辑它并添加解决我的问题的答案。 - David Crosby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接