位運算之負數在計算機中的表達 二進位制1的個數

2021-09-09 08:20:13 字數 639 閱讀 4418

提出問題

給定乙個數n,計算n的二進位制表示中1的個數。(1<=n<=10^9)

引入分析

這道題n是正整數,我延伸了一下,假如n是負數,用程式跑一下發現跟我預想的結果不一樣。下面是分析不同的原因:

在計算機中數n以原碼的補碼儲存在計算機內,正數的補碼等於原碼,例如:5在計算機中的二進位制表示00000000 00000000 00000000 00000101 對5求其二進位制表示的1的個數就是2;但是負數的補碼不等於原碼,其關係是:補碼=原碼的反碼+1;例如-5的原碼10000000 00000000 00000000 00000101 反碼11111111 11111111 11111111 11111010 所以補碼是11111111 11111111 11111111 11111011 對-5求其二進位制表示的1的個數是31,與我預想的有天大的差別,查資料才知道不同的原因是數n在計算機中是使用其補碼儲存的。

**如下

#include

using namespace std;

int main()

cout << num;

return0;

}

負數在計算機中的表示

今天,老大讓我調查乙個浮點數轉換為整數的問題。自己就查了些資料,順便複習一下原碼 反碼和補碼。原碼 將乙個整數,轉換成二進位制,就是其原碼。如單位元組的5的原碼為 0000 0101 5的原碼為1000 0101。反碼 正數的反碼就是其原碼 負數的反碼是將原碼中,除符號位以外,每一位取反。如單位元組...

負數在計算機中的儲存

問乙個基本的問題。負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則...

負數在計算機中的表示

原碼 將乙個整數,轉換成二進位制,就是其原碼。如單位元組的5的原碼為 0000 0101 5的原碼為1000 0101。反碼 正數的反碼就是其原碼 負數的反碼是將原碼中,除符號位以外,每一位取反。如單位元組的5的反碼為 0000 0101 5的原碼為1111 1010。補碼 正數的補碼就是其原碼 負...