c 按位求補( )

2021-10-04 21:05:19 字數 889 閱讀 8647

把乙個數用二進位制形式表示,如果是正數,原碼就等於其二進位制數,如果是負數,最高位,也就是最左邊的那一位變成1

把乙個數表示成二進位制的時候注意,一定要比正常表示的二進位制多4位,用來標記是正數還是負數

比如:12可以表示成1100,但是寫的時候要比它多四位,也就是 0000 1100,最高位為0,表示為正,如果是-12,就是1000 1100

25可以表示成0001 1001,要比它多四位,所以寫成 0000 0001 1001,-25寫成 1000 0001 1001

如果是正數,補碼就等於其原碼

如果是負數,除了符號位,其它全部取反,然後得到乙個整數,再+1,轉換成二進位制,和原來的前四位的反碼組合,就是其補碼

比如:-12,原碼為1000 1100,全部取反,0111 0011,這個二進位制等於3,只計算後四位,前四位是表示是正數還是負數,不參與計算,3+1=4,表示成原碼,就是0111 0100

原碼左邊第一位,正數為0,負數為1

正數:先全部取反,然後求其補碼

負數:先求其補碼,再全部取反

比如:12:原碼 0000 1100  全部取反   1111 0011,補碼:1000 1101 最高位為1 表示為負數,後四位計算為13,所以~12=-13

-12:原碼 1000 1100 補碼:1111 0100 全部取反  0000 1011 最高位為0 表示為正數,後四位計算為11,所以~-12=11

總結:

正數和負數的取補,為其相反數減一

比如上面的~12=-13,~-12=11,可以求證  ~23=-24   ~-23=22

按要求補齊陣列

題目 給定乙個已排序的正整數陣列 nums,和乙個正整數 n 從 1,n 區間內選取任意個數字補充到 nums 中,使得 1,n 區間內的任何數字都可以用 nums 中某幾個數字的和來表示。請輸出滿足上述要求的最少需要補充的數字個數。示例 1 輸入 nums 1,3 n 6 輸出 1 解釋 根據 n...

29 按要求補齊陣列

給定乙個已排序的正整數陣列 nums,和乙個正整數 n 從 1,n 區間內選取任意個數字補充到 nums 中,使得 1,n 區間內的任何數字都可以用 nums 中某幾個數字的和來表示。請輸出滿足上述要求的最少需要補充的數字個數。示例 1 輸入 nums 1,3 n 6 輸出 1 解釋 根據 nums...

330 按要求補齊陣列

題目描述 給定乙個已排序的正整數陣列 nums,和乙個正整數 n 從 1,n 區間內選取任意個數字補充到 nums 中,使得 1,n 區間內的任何數字都可以用 nums 中某幾個數字的和來表示。請輸出滿足上述要求的最少需要補充的數字個數。示例 1 輸入 nums 1,3 n 6 輸出 1 解釋 根據...