题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位。
源代码:
#include <stdio.h>
int func (int a,int p1,int p2,int flag)
{
//将负数的补码转换为原码
if (a < 0 && flag != 0)
{
a -= 1;
a = ~a;
a = a|0x80000000; //改变符号位
}
//printf ("%d\n",a);
int n = 0x40000000;
int count = 0;
n >>= (31 - p2);
//printf ("%d\n",n);
while (count <= (p2 - p1))
{
//printf ("%#x\n",n&a);
if (n&a) //判断该位是否为1
{
printf ("1");
}
else
{
printf ("0");
}
n >>= 1; //让1一位一位向右移
count++;
}
return 0;
}
int main()
{
int a,p1,p2,flag;
printf ("input a num(-2147483647~2147483647):");
scanf ("%d",&a);
printf ("input a p1(1~31):");
sca