题目描述
一般来说,C语言中int 是一种有符号整数型的数据类型,占用32比特。每一个int类型的数都唯一对应了一个长度为32的01串。输入一个整数n,求他的01串反转后对应的整数m
例如:
1对应的串为00000000000000000000000000000001
−2147483648对应的串为10000000000000000000000000000000
输入
一个int范围内十进制整数n
输出
它的反转串对应的十进制整数m
输入样例
1
输出样例
-2147483648
————————————————————————
AC代码如下(使用位运算)
#include <stdio.h>
int main()
{
int n,i,rev=0;
scanf("%d",&n);
for(i=0;i<32;++i)
{
rev<<=1;//左移,给末尾留空
rev=rev|(n&1);//把n的最末位加在rev上
//n&1:取n的最末位
n>>=1;//读取n的上一位
}
printf("%d",rev);
return 0;
}
以0111为例描述以上过程:
初始:
_ _ _ _ _ 0 0 0 0 _ _ _ _ _[rev]
_ _ _ _ _ 0 1 1 1 _ _ _ _ _[n]
i=0
- _ _ _ _ 0 | 0 0 0 0| _ _ _ _ _ //rev<<
_ _ _ _ _ | 0 1 1 1| _ _ _ _ _ - _ _ _ _ 0 | 0 0 0 1| _ _ _ _ _//rev=rev|(n&1)
_ _ _ _ _ | 0 1 1 1| _ _ _ _ _ - _ _ _ _ 0 | 0 0 0 1| _ _ _ _ _//n>>
_ _ _ _ _ | 0 0 1 1 | 1 _ _ _ _
i=1
- _ _ _ 0 0 | 0 0 1 0 | _ _ _ _ _
_ _ _ _ _ | 0 0 1 1 | 1 _ _ _ _ - _ _ _ 0 0 | 0 0 1 1 | _ _ _ _ _
_ _ _ _ _ | 0 0 1 1 | 1 _ _ _ _ - _ _ _ 0 0 | 0 0 1 1 | _ _ _ _ _
_ _ _ _ _ | 0 0 0 1 | 1 1 _ _ _
i=2
- _ _ 0 0 0 | 0 1 1 0 | _ _ _ _ _
_ _ _ _ _ | 0 0 0 1 | 1 1 _ _ _ - _ _ 0 0 0 | 0 1 1 1 | _ _ _ _ _
_ _ _ _ _ | 0 0 0 1 | 1 1 _ _ _ - _ _ 0 0 0 | 0 1 1 1 | _ _ _ _ _
_ _ _ _ _ | 0 0 0 0 | 1 1 1 _ _
i=3
- _ 0 0 0 0 | 1 1 1 0 | _ _ _ _ _
_ _ _ _ _ | 0 0 0 0 | 1 1 1 _ _ - _ 0 0 0 0 | 1 1 1 0 | _ _ _ _ _
_ _ _ _ _ | 0 0 0 0 | 1 1 1 _ _ - _ 0 0 0 0 | 1 1 1 0 | _ _ _ _ _
_ _ _ _ _ | 0 0 0 0 | 0 1 1 1 _
输出
rev=1110
补充:
输入多组int型整数n,输出其在计算机内存储的编码
int main()
{
int n;
int i,t=0;
int a[100]={0};
while(scanf("%d",&n)!=EOF)
{
while(n!=0)
{
a[t]=n&1;
n>>=1;
t++;
}
for(i=31;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
}