有一个32位的int型的整数是一个加密数,它实际表示为另一个数,即将该数从高位至低位的每8位作为一个数(无符号)进行求和后的数。
如:65920,其在计算机内的二进制数表示为:
00000000 00000001 00000001 10000000
则该加密数表示为:
0+1+1+128=130
现有一组这样的数,将其解密后输出。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[100];
void Binarycout(int n)
{
for(int i=31;i>=0;i--)
{
a[i]=(n>>i)&1;
}
}
void reBinarycout()
{
int ans=0,temp=0;
for(int i=0;i<8;i++)
{
temp+=(a[i]<<i);
}
ans+=temp;
//cout<<temp<<endl;
temp=0;
for(int i=8;i<16;i++)
{
temp+=(a[i]<<(i-8));
}
ans+=temp;
//cout<<temp<<endl;
temp=0;
for(int i=16;i<24;i++)
{
temp+=(a[i]<<(i-16));
}
ans+=temp;
//cout<<temp<<endl;
temp=0;
for(int i=24;i<32;i++)
{
temp+=(a[i]<<(i-24));
}
ans+=temp;
//cout<<temp<<endl;
temp=0;
printf("%d\n",ans);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
Binarycout(n);
reBinarycout();
}
return 0;
}