使用庫函式獲取給定數字所需總位數的Haskell程式
Haskell擁有內建函式,例如finiteBitSize、ceiling、logBase、length和showIntAtBase,可用於獲取給定數字所需的總位數。在第一個示例中,我們將使用(bits = finiteBitSize (fromIntegral x :: Int))函式;在第二個示例中,我們將使用(bitsRequired n = ceiling (logBase 2 (fromIntegral (abs n) + 1)))函式;在第三個示例中,我們將使用(bitsRequired n = length $ showIntAtBase 2 intToDigit (abs n) "")函式。
演算法
步驟1 − 匯入內部庫
步驟2 − 使用ceiling和logBase函式定義bitsRequired函式
步驟3 − 程式執行將從main函式開始。main()函式控制整個程式。它被編寫為main = do。
步驟4 − 定義名為“x”的變數,用於儲存需要計算總位數的數字。
步驟5 − 呼叫bitsRequired函式並將數字作為引數傳遞給它。
步驟6 − 呼叫函式後,將所需的結果總位數列印到控制檯。
示例1
在這個示例中,使用finiteBitSize函式計算給定數字所需的總位數。
import Data.Bits (FiniteBits, finiteBitSize) main :: IO () main = do let x = 42 :: Int bits = finiteBitSize (fromIntegral x :: Int) putStrLn $ "The number " ++ show x ++ " requires " ++ show bits ++ " bits to represent."
輸出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... The number 42 requires 64 bits to represent.
示例2
在這個示例中,使用ceiling和logBase函式計算給定數字所需的總位數。
import Numeric.Natural bitsRequired :: Integer -> Int bitsRequired n = ceiling (logBase 2 (fromIntegral (abs n) + 1)) main :: IO () main = do let x = 42 bits = bitsRequired x putStrLn $ "The number " ++ show x ++ " requires " ++ show bits ++ " bits to represent."
輸出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... The number 42 requires 6 bits to represent.
示例3
在這個示例中,使用length和showIntAtBase函式計算給定數字所需的總位數。
import Numeric (showIntAtBase) import Data.Char (intToDigit) bitsRequired :: Integer -> Int bitsRequired n = length $ showIntAtBase 2 intToDigit (abs n) "" main :: IO () main = do let x = 42 bits = bitsRequired x putStrLn $ "The number " ++ show x ++ " requires " ++ show bits ++ " bits to represent."
輸出
[1 of 1] Compiling Main ( main.hs, main.o ) Linking main ... The number 42 requires 6 bits to represent.
結論
數字所需的總位數取決於數字本身以及用於表示它的位數。例如,如果我們使用32位整數,則可以表示的最大值為2^31 - 1 = 2147483647,表示它需要31位。如果我們使用64位整數,則可以表示的最大值為2^63 - 1 = 9223372036854775807,表示它需要63位。我們可以使用某些函式在Haskell中計算相同的結果。