Вообще-то поведение может различаться в зависимости от языка/компилятора. Высокоуровневые языки могут плеваться ошибками переполнения при n=0 или n=-МАХ - смотря от объявления n - знаковое или без. :)
Ну а если в дебри не лазить, то возвращает истину тогда и только тогда, когда значение n содержит не более одного установленного бита (то бишь, ноль и всевозможные степени двойки).