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),这里就比较好理解.