Haskell程式:查詢給定數字的1的補碼


本教程將幫助我們找到給定數字的1的補碼。二進位制數的1的補碼是透過反轉數字的每一位來找到的。1變成0,0變成1。這也被稱為按位非運算。數字的1的補碼在某些型別的錯誤檢測和糾錯示例中很有用,以及在某些型別的數字邏輯電路中。1的補碼最常見的用途是在有符號數表示中,它用於表示負數。

例如,如果一個數字的二進位制表示是“1010”,則它的1的補碼將是“0101”。

演算法

  • 步驟1 - 匯入Data.Bits模組以使用complement函式。

  • 步驟2 - 定義onesComplement函式。

  • 步驟3 - 程式執行將從main函式開始。main()函式控制整個程式。它寫成 main = do。

  • 步驟4 - 命名為“num”的變數被初始化。它將包含需要計算1的補碼的數字。

  • 步驟5 - 使用‘putStrLn’語句和show函式顯示最終結果值。

使用Complement函式

在這個例子中,我們將數字傳遞給onesComplement函式,然後該函式使用complement函式找到該數字的1的補碼。然後它打印出原始數字的1的補碼。

示例1

import Data.Bits
onesComplement :: Int -> Int
onesComplement n = complement n
main :: IO ()
main = do
   let num = 10
   putStrLn $ "The 1's complement of " ++ show num ++ " is " ++ show (onesComplement num)

輸出

The 1's complement of 10 is -11

使用bitSize函式

在這個例子中,onesComplement函式使用輸入數字的bitSize來計算可以用該位數表示的最大值。然後它從這個最大值中減去輸入數字來找到1的補碼。

示例2

import Data.Bits
onesComplement :: Int -> Int
onesComplement n = (2^(bitSize n) - 1) - n

main :: IO ()
main = do
   let num = 10
   putStrLn $ "The 1's complement of " ++ show num ++ " is " ++ show (onesComplement num)

輸出

The 1's complement of 10 is -11

使用xor函式

在這個例子中,我們將從Data.Bits模組匯入特定的xor函式和shiftL運算子來找到給定數字的1的補碼。

示例3

import Data.Bits (finiteBitSize, xor, shiftL)
onesComplement :: Int -> Int
onesComplement n = n `xor` (1 `shiftL` finiteBitSize n - 1)
main :: IO ()
main = do
   let num = 10
   putStrLn $ "The 1's complement of " ++ show num ++ " is " ++ show (onesComplement num)

輸出

The 1's complement of 10 is -11

結論

在Haskell中,有多種方法可以找到給定數字的1的補碼。這可以透過使用complement函式、使用bitSize函式或使用xor函式來實現。二進位制數的1的補碼是透過反轉數字的每一位來找到的。1變成0,0變成1。這也被稱為按位非運算。1的補碼最常見的用途是在有符號數表示中,它用於表示負數。

更新於:2023年1月23日

275 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.