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

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

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

以上是关于哪种代码更易读/快速,以确保输入中的二进制数字始终为零的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法用 CSS 将长数字(“$100000000”)分解成更易读的三元组(“$100 000 000”)?

将以秒为单位的时间间隔转换为更易读的形式

如何将 INSERT sql 语句变成更易读的形式?

以更易读的格式显示双精度科学记数法

codestyle 设置问题

这样优化 if-else 更易读