问题出自编程之美
问题描述:
用A表示将,B表示帅,求A,B所有合法位置,要求程序中只能使用一个字节存储变量
0 1 2
3 4 5
6 7 8
将A所有可能的位置按上编号
解法:
很容易想到用二进制位表示位置
一共9个位置,4个二进制位足够表示,A和B一个8个二进制位,刚好一个字节
代码如下
#include<stdio.h>
int main()
{
unsigned char opt=0;
for(;(opt&0xf0)<0x90;opt+=0x10)
{
for(opt=opt&0xf0;(opt&0x0f)<0x09;opt+=1)
{
if( (opt&0xf0) % 3 != (opt&0x0f) %3)
{
printf("A = %d,B = %d\n",opt&0x0f,(opt&0xf0)>>4);
}
}
}
return 0;
}
书上讲述了另一种方法,利用C语言提供了的一种机制叫位域