Проверка степени двойки java

Понимание кода Java. Проверьте, является ли целое число степенью 2

Это прекрасно работает, но я не могу понять, как работает одиночный «&» в коде. Может ли кто-нибудь попытаться объяснить, как работает код? И по той же логике, какой код будет определять, является ли целое число степенью 3?

На этот вопрос уже был дан ответ по адресу: stackoverflow.com/questions/4678333/ — person Hatward &nbsp schedule 29.02.2016

Ответы (5)

Единственный оператор & — это побитовый оператор «и» (в отличие от оператора &&, который действует на логические значения). Поэтому, когда вы используете & для двух целых чисел, результатом будет логическое «и» их двоичных представлений. Этот код работает, потому что любая степень двойки будет равна 1, за которой следует некоторое количество нулей в двоичном формате (например, 4 — это 100, 8 — это 1000 и т. д.). Любая степень числа 2, кроме единицы, будет просто состоять из единиц (например, 3 равно 11, 7 равно 111). Итак, если вы возьмете степень 2, побитовую, и она сама по себе минус 1, вы должны просто получить 0. Однако все, кроме степени 2, даст ненулевой ответ. Пример:
1000 = 8
0111 = 7 (8-1), и ‘&’ это дает
0000 = 0
Однако, если у вас есть что-то вроде 6 (что не является степенью двойки):
110 = 6
101 = 5 (6-1), и ‘&’ это дает
100 = 4 (что не равно 0, поэтому код вернет false). Я надеюсь, что это ясно!

Читайте также:  Do all computers have java installed

& в Java является побитовым и оператором. Он принимает два целых числа и выполняет операцию и над каждым битом, создавая целое число, в котором каждый бит установлен в «1» тогда и только тогда, когда этот бит был «1» в обоих операндах. В коде используется понимание того, что любая степень двойки в двоичном формате представляет собой «1», за которой следует некоторое количество «0». Это означает, что вычитание единицы изменит ВСЕ биты числа. Для любого числа, отличного от степени двойки, после первой будет хотя бы одна ненулевая цифра, поэтому первая цифра останется прежней. Поскольку выполнение операции И над двумя разными значениями всегда дает «0», выполнение операции И с исходным числом и самим собой за вычетом единицы даст 0 тогда и только тогда, когда это число является степенью двойки. Поскольку это трюк конкретно с двоичными числами, он не сработает для нахождения степеней других оснований.

Чтобы понять, как работает эта функция, вам нужно понять, как представляются двоичные числа. Если вы этого не сделаете, я предлагаю прочитать учебник, такой как Изучите двоичный код (простой способ). Допустим, у нас есть число 8 , и мы хотим выяснить, является ли оно степенью двойки. Давайте сначала преобразуем его в двоичный код: 1000 . Теперь давайте посмотрим на двоичную форму 8-1 = 7 : 0111 . Оператор & предназначен для двоичного AND . Когда мы применяем оператор AND к 8 и 7 , мы получаем:

Каждое целое число, являющееся степенью 2 , представляет собой 1 , за которым следует неотрицательное количество нулей. Когда вы вычитаете 1 из этого числа, вы всегда получаете 0 , за которым следует последовательность 1 . Поскольку применение операции AND к этим двум числам всегда даст вам 0 , вы всегда можете проверить, является ли это степенью 2 . Если число не является степенью 2 , когда вы вычтете из него 1 , оно не инвертирует все его цифры, и проверка AND даст положительное число (не пройдено).

Читайте также:  Php base64 to blob

Это побитовый оператор: если мы возьмем 2 степени 3, равной 8, например, 2³ = 2×2×2 = 8 теперь, чтобы вычислить, является ли 8 степенью числа 2, это работает следующим образом: n&(n-1) —> 8 И (8-1) —> 1000 И 0111 = 0000, таким образом, выполняется условие —> (n&(n-1))==0

Источник

Как проверить, является ли заданное число по абсолютной величине степенью двойки

А как ее можно решить в одну строку? Для этого необходимо убрать переменную. Дальше ступор! Поможете?

Проверить, является ли заданное натуральное число степенью двойки
Здравствуйте, форумчане. Есть следующее задание: Дано натуральное число N. Выведите слово.

Является ли число степенью двойки? Вводится число. Напечатать YES, если оно является степенью двойки, NO — ина
Является ли число степенью двойки? Вводится число. Напечатать YES, если оно является степенью.

Как на стадии компиляции проверить что число является степенью двойки
Очень простой вопрос — как на стадии компиляции проверить что число является степенью двойки? Как.

Является ли заданное натуральное число степенью двойки
Является ли заданное натуральное число степенью двойки? Добавлено через 3 часа 46 минут.

public static boolean isPowerOfTwo(int value) { return Integer.bitCount(Math.abs(value)) == 1; }
return Integer.bitCount(Math.abs(value)) == 1;

Эксперт PythonЭксперт Java

Лучший ответ

Сообщение было отмечено Catstail как решение

Решение

Определить, является ли заданное число степенью двойки
Говорят, что плохой программист – это тот, кто считает, что в одном килобайте 1000 байт, а хороший.

Определить, является ли заданное число точной степенью двойки
Дано натуральное число N. Вывести слово YES, если число N является точной степенью двойки, или.

Проверить, является ли число степенью двойки
Нужно сделать небольшую программу, которая будет проверять, является ли число степенью двойки, то.

Проверить, является ли число степенью двойки
Бьюсь с самого утра все никак. Условия Дано натуральное число N. Выведите слово YES, если число N.

Проверить, является ли число степенью двойки
Если число степень 2, то ДА, иначе НЕТ. #include <fstream> #include <cstring> #include.

Проверить, является ли число точной степенью двойки
Здравствуйте, помогите пожалуйста решить задачу. Дано натуральное число N. Выведите слово YES.

Источник

Побитовые операции: проверить, является ли число степенью двойки

Всем добрый день, только начал изучать Java и застрял на одной задаче по побитовым операциям, вот сама задача:
Известно, что у чисел, которые являются степенью двойки, только один бит имеет значение 1.
Используя IntelliJ IDEA, создайте класс PowerOfTwo.
Напишите программу, которая будет выполнять проверку – является ли указанное число степенью двойки или нет.

К примеру если у нас будет число 10 (0000 1010) как можно узнать сколько битов в числе равно единице. Я так понимаю тут нужно использовать операцию & или ^ с каким-то числом, к примеру если сделать:
10^255 = 245 (1111 0101), все-равно чего-то не пойму.
Прошу помочь. Спасибо.

Проверить, является ли число точной степенью двойки
Здравствуйте, помогите пожалуйста решить задачу. Дано натуральное число N. Выведите слово YES.

Нужно применить быстрое преобразование Фурье к массиву, длина которого не является степенью двойки
Всем добрый день! Столкнулся с проблемой, что нужно применить быстрое преобразование Фурье к.

Функция проверяющая является ли число степенью 5
Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (> 0).

Если число является степенью числа 3, то вывести True, если не является – вывести False
3.Дано целое число N(>0). Если оно является степенью числа 3, то вывести True, если не является –.

Чтобы получить n-ую степень двойки, нужно сдвинуть число 1 на n разрядов влево. А потом просто сравнить с указанным числом.

if (val == 1n) { System.out.printf("%d is %d power of two", val, n); }

Блин, точно, спасибо большое. А я думал как-то через ^ нужно, оказалось все проще)))
Еще раз спасибо.

Лучший ответ

Сообщение было отмечено HighPredator как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
public class PowerOfTwo { private final int value; public PowerOfTwo(int value) { this.value = value; } public boolean isPowerOfTwo() { if(value == 0) { return false; } int copy = value; while (copy % 2 == 0) { copy = copy / 2; } return copy == 1; } public boolean isMostOneOnly() { if(value == 0) { return false; } int copy = value; while ((copy & 1) == 0) { copy >>=1; } return copy == 1; } public static void main(String[] args) { PowerOfTwo p4 = new PowerOfTwo(8); System.out.println(p4.value+" is power of two:"+p4.isPowerOfTwo()); System.out.println(p4.value+" is power of two:"+p4.isMostOneOnly()); for (int i = 0; i  64 +1; i++) { PowerOfTwo p2 = new PowerOfTwo(i); System.out.println(p2.value+" is power of two:"+p2.isPowerOfTwo()); System.out.println(p2.value+" is power of two:"+p2.isMostOneOnly()); } } }

Источник

Проверить, является ли число N точной степенью двойки (Java -> Си)

Точная степень двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
Операцией возведения в степень пользоваться нельзя!
Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
public class Solution { public static int recursion(double n) { // Базовый случай if (n == 1) { return 1; } // Базовый случай else if (n > 1 && n  2) { return 0; } // Шаг рекурсии / рекурсивное условие else { return recursion(n / 2); } } public static void main(String[] args) { double n = 64; // вызов рекурсивной функции if (recursion(n) == 1) { System.out.println("Yes"); } else { System.out.println("No"); }

Определить, является ли число степенью двойки.
Вводится натуральное число n. Определить, является ли оно степенью двойки.

Дано натуральное число n>1. Проверить является ли число n степенью 2
Дано натуральное число n>1. Проверить является ли число n степенью 2. Программа должна вывести.

Проверить, является ли число n точной степенью двойки
2) Ввести число n с клавиатуры. Если число n является точной степенью двойки, вывести “YES”, в.

Проверить, является ли число точной степенью двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или.

Источник

Оцените статью