我想看到編譯二進制負數怎麼寫,所以這裏是代碼應該這樣做補發現算法
#include <cstdlib>
#include <iostream>
using namespace std;
void complement(int n)
{
int l = n;
int s = 0;
int k = 0;
int m = 0;
while (n != 0)
{
s = n % 2;
n /= 2;
cout << s << " ";
}
cout << endl;
m = ~l + 1;
cout << m << endl;
cout << endl;
while (m != 0)
{
int k = m % 2;
m /= 2;
cout << k << " ";
}
}
int main(int argc, char *argv[])
{
int n;
cin >> n;
cout << endl;
complement(n);
system("PAUSE");
return EXIT_SUCCESS;
}
,但奇怪的是,當我進入5,例如,其中明確二進制形式是3位101,其補碼-5表示-10-1?這是我的代碼的輸出顯示給我的,但我知道這是不正確的,因爲任意數字的2的補碼是通過反轉它的位,0乘1,反之亦然,然後是+1給出的,如果是5(101 ),-5將是(010 + 1)=(011)。請幫助我,如何糾正我的代碼,以便它可以正確補充。
請正確縮進您的代碼,現在無法讀取。 –
如果您希望得到答案,請在格式化問題時付出一些努力。我縮進了代碼,刪除了一些空行並添加了一些空格,因爲'int k = m%2;'肯定比'int k = m%2;'更好。 – ereOn