#include <stdio.h>
void print_array(int x) //以二进制打印出32位整形数
{
int i;
unsigned int mask = 1u;
for (i = 31; i >= 0; i--)
{
if ((mask << i) & x)
{
printf("1");
}else
{
printf("0");
}
if (i % 4 == 0)
{
printf(" ");
}
}
printf("\n");
}
int my_countbit(unsigned int x) //计算一个数二进制形式中1的个数
{
int i;
int count = 0;
unsigned int mask = 1u;
for (i = 0; i < 32; i++)
{
if ((x >> i) & mask == 1)
{
count++;
}
}
return count;
}
unsigned int ror1(unsigned int x, int n) //循环右移1
{
int i;
while (n < 0)
{
n = n + 32;
}
n = n % 32;
for (i = 0; i < n; i++)
{
x = (x >> 1) + (x << 31);
}
return x;
}
unsigned int ror2(unsigned int x, int n) //循环右移2
{
int i;
while (n < 0)
{
n = n + 32;
}
n = n % 32;
x = (x >> n) + (x << 32 - n);
return x;
}
int main()
{
int n;
unsigned int a = 0xdeadbeef;
printf("请输入你想向右移的位数:");
scanf("%d", &n);
print_array(a);
print_array(ror1(a, n));
return 0;
}