数组元素有2048个,全部为十进制的,现在要将数组元素全部转换为补码形式表示。代码应该怎么写?
#include<iostream.h>
main()
{
char cc[8];
int a[8],b[8],i,j,c=0;
for(i=0;i<8;i++)
{
cin>> cc[i];
a[i]=b[i]=cc[i]-48;
}
if(a[0]==1)
{
cout<<"原码为:";
for(i=0;i<8;i++)//原码
cout<<a[i];
cout<<"反码为:";
cout<< "1";
for(i=1;i<8;i++)//负数反补不同
{
if(a[i]==0) //反码
cout<<"1";
else
cout<<"0";
}
cout<<"补码为:";
cout<< "1";
if(b[7]==0)
{b[7]=0;c++;}
if(c)
{
for(i=1;i<7;i++)
{
if(b[i]==0)
b[i]=1;
else
b[i]=0;
}
b[7]=0;
b[6]++;
for(i=6;b[i]==2;i--)
{
b[i]=0;
b[i-1]++;
}
for(i=1;i<8;i++)
cout<<b[i];
}
else
{
for(i=1;i<7;i++)
{
if(a[i]==0)
cout<<"1";
else
cout<<"0";
}
cout<<"1";
}
}
else
{
cout<<"原码为:";
for(i=0;i<8;i++)//正数原反补一样
cout<<a[i];
cout<<"反码为:";
for(i=0;i<8;i++)
cout<<a[i];
cout<<"补码为:";
for(i=0;i<8;i++)
cout<<a[i];
}
}
#include <iostream>
#include <limits.h>
/**
十进制转补码
*/
void bin(int deg)
{
int i;
unsigned int mask = 1 << CHAR_BIT*sizeof(int)-1;
for (i = 1; i <= sizeof(int)*CHAR_BIT; i++) {
putchar(deg&mask ? '1' : '0');
if (i % 8 == 0) {
putchar(' ');
}
mask >>= 1;
}
}
int main(int argc, char* argv[])
{
bin(-2);
return 0;
}
不需要特意对保存的数据进行补码运算,因为不论是在嵌入式系统,还是PC机,服务器,内存中的任何数据都是以补码形式存在的。
设置一个2048次循环,每次循环把一个元素转换成二进制数字,再每位取反,末尾加一,,