郑州市财政局:编写程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 08:09:37
编写程序 ,给定一个整数i,请求出另一个整数j,使i和j在用8位二进制表示时互为逆序。例如:给定i=3,应得到j=192

拜托,是二进制码转置好不好。不要看到192是3的64倍就左移6位。那要是i=5你还左移6位啊。

#include "stdio.h"

void main()
{
int i;
scanf("%d",&i);
int a[8];
int s=1;
for(int j=0;j<8;j++,s<<=1)
{
a[j]=i & s;
}
printf("%d\n",(a[0]<<7) | (a[1]<<5) | (a[2]<<3) | (a[3]<<1)
| (a[4]>>1) | (a[5]>>3) | (a[6]>>5) | (a[7]>>7));
}

是用C吗?按位取反啊!

j=~i;

不是按位取反,如果是按位取反直接255-i就行了,可是与题目结果不一致。
不是位移也不用循环位移,就是将二进制对称位置交换。
#include<stdio.h>
int main()
{
int i,j,k,l,x,y;
scanf("%d",&i);
k=0x1;
l=0x80;
for(j=0;j<4;j++)
{
x=k&i;
y=l&i;
i&=~k;
i&=~l;
x<<=7-2*j;
y>>=7-2*j;
i|=x;
i|=y;
k<<=1;
l>>=1;
}
printf("%d",i);
return 0;
}

c可没有汇编的循环移位。
i<<=6,= i*2^6;

可以这样:

j=0;
for(m=0;m<8;m++)
{
j |= i & 0x1;
j<<=1;
i>>=1;
}