获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。
举例,数字10
二进制序列
00000000 00000000 00000000 00001010--补码
猜想要分别打印奇偶数位的数,应采用位移的办法
没有思路参考百度
1.要打印二进制,就是打印出0和1(十进制)
2.利用计算器总结&,|,^,三个位操作符的计算规律。
&按位与(有0为0,同1为1)
奇数&1=1
偶数&1=0 正负数同样适用
奇数&0=0
偶数&0=0 正负数同样适用
奇数&-1=原值
偶数&-1=原值 正负数同样适用
| 按位或(有1为1,同0为0)
奇数 | 1=原值
偶数 | 1=原值 正负数同样适用
奇数 | 0=原值
偶数 | 0=原值 正负数同样适用
奇数 | -1=-1
偶数 | -1=-1 正负数同样适用
^按位异或(相同位0,相异为1)
两个数的往复交换(未尝试出其他规律)
-------------------------------------------------------------------------------
通过观察上述的规律,可以发现按位与的二进制计算规律,可以将二进制数的最后一位以十进制1或0的形式打印出来,奇数二进制位最后一位一定为1,偶数二进制位最后一位一定为0.配合位移就可以打印出二进制位的每一位数。
int main()
{
int n = 0;
scanf("%d", &n);
/*打印每一位二进制位*/
int i = 0;
for (i = 31; i >= 0; i--)
{
printf("%d", (n >> i) & 1);
}
printf("\n");
//打印奇数位
for (i = 31; i >= 0; i-=2)
{
printf("%d", (n >> i) & 1);
}
printf("\n");
//打印偶数位
for (i = 30; i >= 0; i -= 2)
{
printf("%d", (n >> i) & 1);
}
printf("\n");
return 0;
}