哪种代码更易读/快速,以确保输入中的二进制数字始终为零
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哪种代码更易读/快速,以确保输入中的二进制数字始终为零相关的知识,希望对你有一定的参考价值。
变体1
convertToBinary digitsList =
digitsList
|> List.take 4
|> setLastDigitToZero
|> numberFromDigits
setLastDigitToZero digitsList =
Array.fromList digitsList
|> Array.set (lastIndex digitsList) 0
|> Array.toList
lastIndex digitsList =
List.length digitsList - 1
vs
变体2
convertToBinary digitList =
digitList
|> List.take 3
|> List.reverse
|> List.append [ 1 ]
|> List.reverse
|> numberFromDigits
您怎么看?而且最重要的是为什么?
答案
似乎您想将4位数字中的最低有效位设置为零。为此,您可以传入数字数组,使用数组操作将数字设置为零,然后重新组合数字。
无论您如何做,这都会很慢。
更快得多的方法是将数字保持为整数并使用按位运算:
clearLeastSignificantBit : Int -> Int
clearLeastSignificantBit n = Bitwise.and n 0x0E -- 00001110 in binary
这种方式:
clearLeastSignificantBit 15 == 14 -- 1111 -> 1110
clearLeastSignificantBit 10 == 10 -- 1010 -> 1010
clearLeastSignificantBit 3 == 2 -- 0011 -> 0010
由于程序员通常熟悉按位运算,所以这是很容易理解的。
以上是关于哪种代码更易读/快速,以确保输入中的二进制数字始终为零的主要内容,如果未能解决你的问题,请参考以下文章