var
  j: Integer;
begin
  j := StrToInt(edt1.Text);
  if (j > 1) and ((j and (j - 1)) = 0) then
    ShowMessage('是2的次方数');

 

1. (j and (j - 1))
   这部份条件里的and是进行位与运算
   这里假设j符合条件(4)
   0100 = 4 (j)
   0011 = 3 (j-1)
   ----AND
   0000 = 0
   *符合条件的整数(1和0除外)经过这样运算结果为0
   ((j and (j - 1)) = 0)就比较好理解了

2. (j > 1)
   理解了(1),这里就比较好理解.