位段结构也是一种结构体类型,只不过该类型含有以位作为单位定义存储长度的整数类型位段成员。在某些应用中,有些信息在存储时,并不需要使用一个完整的字节,而只是需要使用一个或者几个二进制位。采用位段结构,既节省存储空间,也方便操作。
在《编程之美》中的1.2中国象棋将帅问题中,采用位段结构来解决此题,很方便,效率也高。也利于理解。
中国象棋将帅问题描述:
假设棋盘中只有“将”和“帅”二子。设A为“将”,B为“帅”。A,B二子分别被限制在己方的3*3的格子运动。每一步A,B可以横向或竖向运动,但不能沿对角线运动。另外:A,B不能碰面,也就是说, A,B不能在同一条竖线上。编写一个程序,输出A,B所有合法位置。要求代码中只能使用一个变量。
当采用位段结构来解决这个问题的时候,代码如下:
struct { unsigned char a:4; unsigned char b:4; }i; for(i.a=1;i.a< =9;i.a++) for(i.b=1;i.b<=9;i.b++) if(i.a%3!=i.b%3) printf("A=%d , B=%dn",i.a,i.b); |
可以看到解决方案很清晰,也易懂。
关于此题的其他解决方案,请参考《编程之美》
