【问题描述】编写函数,实现将一个数中最低字节第0、2、4、6位按位取反,而其他位不变(从左到右)。
【输入形式】输入一个整数
【输出形式】只输出最低字节数值
【样例输入】43690
【样例输出】0
#include<stdio.h>
int main()
{
void fan(unsigned int a);
unsigned int a = 0;
scanf("%d", &a);
fan(a);
return 0;
}
void fan(unsigned int a)
{
unsigned int x, y, z, m;
x = a & 0xff;//取后8位
y = x & 0xaa;//取0,2,4,6位,将1,3,5,7位取0
z = x & 0x55;//取1,3,5,7位,将0,2,4,6位取0
m = (~y) & (0xaa + z);
printf("%d\n", m);
}
需要的知识
0xff 11111111
0xaa 10101010
0x55 01010101
unsigned int 16位数字
步骤细节
~y -----将a中第0,2,4,6取反,第1,3,5,7位取为1
0xaa+z ------取a中第1,3,5,7位,将0,2,4,6位取为1