Я понимаю, что (2 * i == (i ^ (i - 1) + 1) в Java позволит мне найти, если число является степенью двойки. Но может ли кто-нибудь объяснить, почему это работает?