так, ну я понимаю, что для удобства просто не укладывается в голове, почему именно так вычитается а что следует подучить, попрактиковать, чтобы это понимать?
Могу объяснить, почему не работали макросы на 64 бита. Кстати, там и сейчас есть ошибки. Скажем если вдруг понадобится такой вызов SetBit(A, i+1), то посчитает неверно. Ну и вообще всю эту прогу можно больше чем в два раза ускорить и в два раза сократить память.