使用庫函式獲取給定數字所需總位數的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中計算相同的結果。

更新於:2023年3月28日

68 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告