#include <stdio.h>
void print_array(unsigned 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 count1(unsigned char x) //计算一个字节中1的个数.
{
int i;
int count = 0;
unsigned char mask = 1u;
for (i = 7; i >= 0; i--)
{
if ((mask << i) & x)
{
count++;
}
}
return count;
}
unsigned get_bit1(unsigned int x, int a, int b) //取出a到b位
{
x = (x >> a) & (0u << (b - a + 1));
return x;
}
unsigned get_bit2(unsigned int x, int a, int b) //取出a到b位取反
{
x = (~x >> a) & (0u << (b - a + 1));
return x;
}
unsigned set_0_or_1(unsigned int x, int p, _Bool v)
{
unsigned int mask = 1u;
if (v == 0)
{
x = ~(mask << p) & x;
}else
{
x = (mask << p) | x;
}
return x;
}
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 get_newbit(unsigned int x)
{
unsigned int a = ror1(x, 1);
unsigned int b = ror1(x, -1);
print_array(a);
print_array(b);
return a ^ b;
}
int main()
{
unsigned int n = 0x12345678;
int p1 = 2;
int p2 = 12;
int p = 11; //p从0位开始,表示改变第p+1位(从1数)的数.
_Bool v = 1;
print_array(n);
//printf("%d\n", count1(n));
//print_array(get_bit1(n, p1, p2));
//print_array(get_bit2(n, p1, p2));
//print_array(set_0_or_1(n, p, v));
print_array(get_newbit(n));
return 0;
}