哪种代码更易读/快速,以确保输入中的二进制数字始终为零

问题描述 投票:0回答:1

变体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

您怎么看?而且最重要的是为什么?

elm
1个回答
0
投票

似乎您想将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

由于程序员通常熟悉按位运算,所以这是很容易理解的。

© www.soinside.com 2019 - 2024. All rights reserved.