去掉最后一位 | (101101->10110)
void part1(unsigned int a)
{
a >> 1;
printf("a=%#a\n", a);
}
在最后加一个0 | (101101->1011010)
void part2(unsigned int a)
{
a << 1;
printf("a=%#a\n", a);
}
在最后加一个1 | (101101->1011011)
void part3(unsigned int a)
{
a << 1 + 1;
printf("a=%#a\n", a);
}
把最后一位变成1 | (101100->101101)
void part4(unsigned int a)
{
a | 1;
printf("a=%#a\n", a);
}
把最后一位变成0 | (101101->101100)
void part5(unsigned int a)
{
a | 1 - 1;
printf("a=%#a\n", a);
}
{
a | 1 - 1;
printf("a=%#a\n", a);
}
最后一位取反 | (101101->101100)
void part6(unsigned int a)
{
a ^ 1;
printf("a=%#a\n", a);
}
{
a ^ 1;
printf("a=%#a\n", a);
}
把右数第k位变成1 | (101001->101101,k=3)
void part7(unsigned int a,int k)
{
a |(1<<(k-1));
printf("a=%#a\n", a);
}
{
a |(1<<(k-1));
printf("a=%#a\n", a);
}
把右数第k位变成0 | (101101->101001,k=3)
void part8(unsigned int a, int k)
{
a &! (1 << (k - 1));
printf("a=%#a\n", a);
}
右数第k位取反 | (101001->101101,k=3)
void part9(unsigned int a, int k)
{
a ^ (1 << (k - 1));
printf("a=%#a\n", a);
}
{
a ^ (1 << (k - 1));
printf("a=%#a\n", a);
}
取末k位 | (1101101->1101,k=5)
void part10(unsigned int a, int k)
{
a &(1 << k - 1);
printf("a=%#a\n", a);
取右数第k位 | (1101101->1,k=4)
void part11(unsigned int a, int k)
{
a>>(k-1)&1;
printf("a=%#a\n", a);
}
把右边连续的1变成0 | (100101111->100100000)
void part12(unsigned int a)
{
a &(a + 1);
printf("a=%#a\n", a);
}
把右起第一个0变成1 | (100101111->100111111)
void part13(unsigned int a)
{
a | (a + 1);
printf("a=%#a\n", a);
}
把右边连续的0变成1 | (11011000->11011111)
void part14(unsigned int a)
{
a | (a - 1);
printf("a=%#a\n", a);
}