中国象棋将帅问题

本题选自《编程之美》1.2:中国象棋将帅问题。
代码如下

#define HALF_BITS_LENGTH 4
#define FULLMASK 255
#define LMASK (FULLMASK << HALF_BITS_LENGTH)
#define RMASK (FULLMASK >> HALF_BITS_LENGTH)
#define LSET(b, n) (b = (b & RMASK) | (n << HALF_BITS_LENGTH))
#define RSET(b, n) (b = (b & LMASK) | n)
#define LGET(b) (b >> HALF_BITS_LENGTH)
#define RGET(b) (b & RMASK)
#define GRID 3

#include <stdio.h>

int main()
{
    unsigned char b;

    for (LSET(b, 1); LGET(b) <= GRID * GRID; LSET(b, (LGET(b) + 1))){
    for (RSET(b, 1); RGET(b) <= GRID * GRID; RSET(b, (RGET(b) + 1))){
        if (LGET(b) % GRID != RGET(b) % GRID){
            printf("A = %d, B = %d  t", LGET(b), RGET(b));
        }
    }
    printf("n");
    }

    return 0;
}

结果如下:

A = 1, B = 2      A = 1, B = 3      A = 1, B = 5      A = 1, B = 6      A = 1, B = 8      A = 1, B = 9      
A = 2, B = 1      A = 2, B = 3      A = 2, B = 4      A = 2, B = 6      A = 2, B = 7      A = 2, B = 9      
A = 3, B = 1      A = 3, B = 2      A = 3, B = 4      A = 3, B = 5      A = 3, B = 7      A = 3, B = 8      
A = 4, B = 2      A = 4, B = 3      A = 4, B = 5      A = 4, B = 6      A = 4, B = 8      A = 4, B = 9      
A = 5, B = 1      A = 5, B = 3      A = 5, B = 4      A = 5, B = 6      A = 5, B = 7      A = 5, B = 9      
A = 6, B = 1      A = 6, B = 2      A = 6, B = 4      A = 6, B = 5      A = 6, B = 7      A = 6, B = 8      
A = 7, B = 2      A = 7, B = 3      A = 7, B = 5      A = 7, B = 6      A = 7, B = 8      A = 7, B = 9      
A = 8, B = 1      A = 8, B = 3      A = 8, B = 4      A = 8, B = 6      A = 8, B = 7      A = 8, B = 9      
A = 9, B = 1      A = 9, B = 2      A = 9, B = 4      A = 9, B = 5      A = 9, B = 7      A = 9, B = 8