Что поразрядное кодирует “$n, и ($n - 1)” делают?

Вы могли попробовать что-то вроде этого:

# Create something that accepts anything
class Fake(object):
    def __getattr__(self, key):
        return self
    def __call__(self, *args, **kwargs):
        return True

# Replace the logging module
import sys
sys.modules["logging"] = Fake()

Это по существу заменяет (или первоначально заполняет), пространство для регистрирующегося модуля с экземпляром Fake, который просто берет в чем-либо. Необходимо выполнить вышеупомянутый код (только однажды!), прежде чем регистрирующийся модуль предпринят, чтобы использоваться где угодно. Вот тест:

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)-8s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='/temp/myapp.log',
                    filemode='w')
logging.debug('A debug message')
logging.info('Some information')
logging.warning('A shot across the bows')

С вышеупомянутым, ничто вообще не было зарегистрировано, как должен был ожидаться.

6
задан Alix Axel 9 January 2010 в 02:29
поделиться

2 ответа

Эта формула проверяет, является ли число степенью 2 (если ваше условие в том виде, в каком оно написано, истинно, то число не a степень двойки).

Другими словами, ваш тест проверяет, установлено ли более одного бита «1» в двоичном представлении $ n . Если установлен ноль или только один бит, то ваш тест будет ложным.

Это, безусловно, наиболее эффективный способ определить это свойство.

17
ответ дан 8 December 2019 в 05:56
поделиться

Во-первых, этот код является допустимым PHP, поэтому ваш заголовок плохой.

Во-вторых, происходящая двоичная арифметика выглядит примерно так:

42 = 101010
   &
41 = 101001
-----------
40 = 101000

Как и утверждает Грег, это самый быстрый способ чтобы проверить, является ли число степенью 2, но введенный вами код проверяет, является ли число , а не степенью 2 . В этом легко убедиться с помощью политики PHP: любое ненулевое / ненулевое значение является истинным.

5
ответ дан 8 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: