Sultan
16 уровень

Codes, inc; Room #004

Статья из группы Архив info.javarush
участников

Бинарные числа

Codes, inc; Room #004 - 1 "Говорят, что плохой программист – это тот, кто считает, что в одном килобайте 1000 байт, а хороший программист – это тот, кто полагает, что в одном километре 1024 метра." Многим эта шутка понятна, так как все знают, что в процессах, связанных с информатикой и компьютерной техникой, фигурирует множество значений, выражаемых степенью двойки, то есть чисел вида 2^K, где K – некоторое неотрицательное целое число. Назовем такие числа бинарными. Это такие числа как 1, 2, 4, 8, 16, 32 и т.д. Действительно, когда речь идет о размере памяти или о разрешении экрана монитора, то мы часто наталкиваемся на бинарные числа. Все это связано с принципом хранения информации в памяти ЭВМ. Задано целое число N. Требуется определить, является ли оно бинарным. Напишите функцию public static boolean isBinary(int n), которая возвращает true, если n - степень двойки, иначе - false. Доп. задание: Попробуйте решить задачу, не используя условий и тернарных операторов ("?:"). Решение: public static boolean isBinary(int n) { return n > 0 && (n & n - 1) == 0; }
Комментарии (18)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
tsev
Уровень 30
26 августа 2014, 14:59
return n > 0 && (n & (n-1)) == 0;
Docktor91
Уровень 40
26 августа 2014, 15:09
а вот это походу еще мощней))
Tan4ek
Уровень 20
26 августа 2014, 15:33
Бомба!
terranum
Уровень 28
26 августа 2014, 16:23
Красава! :)
Docktor91
Уровень 40
26 августа 2014, 14:36
public static boolean solv2e(int n)
{
    return n == 1 || n % 2 == 0 & solv2e(n / 2);
}
Tan4ek
Уровень 20
26 августа 2014, 15:00
Мощно! Я в восторге!
Sultan
Уровень 16
26 августа 2014, 15:12
при n = 0 стэк переполняется
Docktor91
Уровень 40
26 августа 2014, 15:17
public static boolean solv2e(int n)
{
    return n == 1 || n > 0 && n % 2 == 0 && solv2e(n / 2);
}
Sultan
Уровень 16
26 августа 2014, 15:22
теперь правильно, хотя рекурсия здесь неуместна
Tan4ek
Уровень 20
26 августа 2014, 14:09
public static boolean func(int n){
        return (Math.log(n) / Math.log(2)) == 0;
    }
Sultan
Уровень 16
26 августа 2014, 14:15
возвращает true, только если n = 1
Tan4ek
Уровень 20
26 августа 2014, 14:18
А что если…
public static boolean func(int n){
        return n != 1 && (Math.log(n) / Math.log(2)) == 0;
    }
Sultan
Уровень 16
26 августа 2014, 14:28
ну тогда вообще только false
Tan4ek
Уровень 20
26 августа 2014, 14:37
Блин
Tan4ek
Уровень 20
26 августа 2014, 14:41
Понял!
public static boolean func(int n){
        return n == Math.pow(2 , (int) (Math.log(n) / Math.log(2)));
    }
Sultan
Уровень 16
26 августа 2014, 15:11
при n = 0, должно возвращать false
Tan4ek
Уровень 20
26 августа 2014, 15:15
Не блины, а комы получаются =)
return n > 0 && n == Math.pow(2 , (int) (Math.log(n) / Math.log(2)));
Sultan
Уровень 16
26 августа 2014, 15:17
#thumb-up