перечисление со значением 0x0001?

элементы Словаря Доступа как атрибуты (свойства). таким образом, если a1=AttrDict () имеет ключевое 'имя'-> вместо a1 ['имя'] мы можем легко получить доступ к атрибуту имени использования a1-> <час> a1.name

class AttrDict(dict):

    def __getattr__(self, name):
        if name in self:
            return self[name]
        raise AttributeError('%s not found' % name)

    def __setattr__(self, name, value):
        self[name] = value

    def __delattr__(self, name):
        del self[name]

person = AttrDict({'name': 'John Doe', 'age': 66})
print person['name']
print person.name

person.name = 'Frodo G'
print person.name

del person.age

print person
5
задан Adrian Godong 23 July 2009 в 18:08
поделиться

8 ответов

Это просто означает, что если вы сделаете Filter-> a, вы получите 1. Filter-> b равно 2.

Странная шестнадцатеричная запись - это всего лишь запись.

EDIT : Поскольку это «фильтр», шестнадцатеричная запись имеет немного больше смысла.

Записывая 0x1, вы указываете следующий битовый шаблон:

0000 0001

А 0x2 - это:

0000 0010

Это проясняет, как использовать фильтр. .

Так, например, если вы хотите отфильтровать данные, у которых установлены младшие 2 бита, вы можете сделать:

Filter->a | Filter->b

, что будет соответствовать:

0000 0011

Шестнадцатеричная запись делает концепцию фильтра более понятной (для некоторые люди). Например, относительно легко вычислить двоичный код 0x83F0, посмотрев на него, но гораздо сложнее для 33776 (то же число в базе 10).

7
ответ дан 18 December 2019 в 06:12
поделиться

Это означает, что это целые числа, присвоенные этим именам. Перечисления - это просто именованные числа. Вы можете выполнять приведение между базовым типом перечисления и значением перечисления.

Например:

public enum Colour
{
    Red = 1,
    Blue = 2,
    Green = 3
}

Colour green = (Colour) 3;
int three = (int) Colour.Green;

По умолчанию базовым типом перечисления является int , но вы можете использовать любой из byte , sbyte , short , ushort , int , uint , long или ulong :

public enum BigEnum : long
{
    BigValue = 0x5000000000 // Couldn't fit this in an int
}
10
ответ дан 18 December 2019 в 06:12
поделиться

Непонятно, что именно вы находите неясным, поэтому давайте обсудим все это:

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

Числа записываются в шестнадцатеричной системе счисления, это часто используется, когда вы хотите, чтобы числовые значения содержали один установленный бит для маскировки. Легче увидеть, что значение имеет только один установленный бит, когда оно записано как 0x8000, чем когда оно записано как 32768.

В вашем примере это не так очевидно, поскольку у вас есть только два значения, но для битовой фильтрации каждое значение представляет собой одно bit так, чтобы каждое значение было вдвое больше предыдущего:

public enum Filter {
   First = 0x0001,
   Second = 0x0002,
   Third = 0x0004,
   Fourth = 0x0008
}

Вы можете использовать такое перечисление для фильтрации отдельных битов в значении:

If ((num & Filter.First) != 0 && (num & Filter.Third) != 0) {
   Console.WriteLine("First and third bits are set.");
}
4
ответ дан 18 December 2019 в 06:12
поделиться

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

0x001 - это число 1 . Каждый раз, когда вы видите 0x , это означает, что программист ввел число в шестнадцатеричном формате.

2
ответ дан 18 December 2019 в 06:12
поделиться

Похоже, это какие-то битовые маски. Но их фактические значения - 1 и 2 ...

Вы можете присвоить значения перечислениям, например:

enum Example {
    a = 10,
    b = 23,
    c = 0x00FF
}

и т.д. ...

0
ответ дан 18 December 2019 в 06:12
поделиться

Использование шестнадцатеричной системы счисления обычно указывает на то, что возможны некоторые манипуляции с битами. Я часто использовал эту нотацию, когда имел дело именно с этим, по той самой причине, по которой вы задали этот вопрос - эта нотация как бы выскакивает у вас и говорит: «Обратите внимание на меня, я важен!»

0
ответ дан 18 December 2019 в 06:12
поделиться

Что ж, мы можем использовать целые числа, на самом деле, мы можем избежать любого, поскольку природа enum по умолчанию присваивает 0 его первому члену и увеличиваемое значение следующему доступному члену. Многие разработчики используют это, чтобы поразить две цели одним луком.

  • Усложнение кода, затрудняющее понимание
  • Быстрее производительность, поскольку шестнадцатеричные коды ближе к двоичным

Я считаю, если мы все еще используем, почему мы находятся на языке четвертого поколения, просто перейдите к двоичному снова

, но это гораздо лучший метод игры с битами и процессом шифрования / дешифрования

0
ответ дан 18 December 2019 в 06:12
поделиться
Другие вопросы по тегам:

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