补码
知识点1:
例题1:
法一:利用二进制函数
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
int t;
cin >> t;
while (t --) {
cin >> n;
auto ans = n;
cout << bitset<32>(ans) << endl;
}
}
法二:
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
int t;
cin >> t;
while (t --) {
cin >> n;
int f=1,k=n;
if(n<0){
f=0;
k=abs(n);
}
int m=0;
for(int i=0;i<31;i++)
{
if(f&&(k>>i&1))//如果是正数
{
m+=(1<<i);
}
if(!f&&!(k>>i&1))//是负数 且该位为0
{
m+=(1<<i);//加上2的i次方
}
}
if(!f)m++;//负数补码加1
//把第一位 符号位 再一次判断输出
if(f)printf("0");
else printf("1");
for(int i=30;i>=0;i--){
if((m>>i)&1)printf("1");
else printf("0");
}
puts(" ");
}
}