7
votes

Enum avec valeur 0x0001?

J'ai une déclaration d'énorme, comme ceci: XXX

Qu'est-ce que cela signifie? Ils utilisent ceci pour filtrer un tableau.


0 commentaires

9 Réponses :


10
votes

Cela signifie que sont les valeurs entières attribuées à ces noms. Enums sont fondamentalement nommés numéros. Vous pouvez lancer entre le type sous-jacent d'une énumération et la valeur ENUM.

Par exemple: P>

public enum BigEnum : long
{
    BigValue = 0x5000000000 // Couldn't fit this in an int
}


12 commentaires

Pourquoi ne pouvons-nous pas utiliser les entiers? Quelle était la nécessité d'utiliser la notation hexagone?


Vous pouvez utiliser des entiers (comme indiqué dans mon premier exemple) - mais vous pouvez également utiliser Hex. C'est juste un choix.


Il n'était probablement pas nécessaire d'utiliser hexagonal, ils ont probablement simplement utilisé Hex pour être plus évident pour le programmeur sur ce qu'ils sont utilisés.


Le filtre permet-il de combiner les valeurs (par exemple MyFilter = A | B)? Si vous avez donc besoin de valeurs comme 00000001b ou 00000010B afin que vous puissiez les combiner. L'utilisation de HEX facilite l'exprimer ces valeurs (0x08, 0x10, 0x20 plutôt que 8,16,32). Vous pouvez également combiner 0x10 et 0x20 à 0x30, ce qui est plus facile que sans notation hexagonale.


Ce n'est pas évident. C'est confus, je suppose. Au moins pour moi.


@RJ ... Ouais, cela peut être déroutant, mais il est censé montrer que les valeurs sont probablement utilisées dans un but spécifique de l'ordinaire.


Si une énumération est marquée avec l'attribut [Flags], il est possible de faire des arithmétiques binaire dessus. Dans cette situation, il peut avoir du sens à utiliser la notation hexagonale. Voir msdn.microsoft.com/en-us/library/system.flagsattribute .aspx .


@RJ: Habituellement, Hex est préférable à la décimale lorsque vous travaillez avec des drapeaux à base de bits, car il est beaucoup plus facile de lire des drapeaux dans Hex (c.-à-d. Si vous allez effectuer ultérieurement des opérations bitwises, il est plus facile de lire 0x10, 0x20, 0x40, 0x80 qu'il ne s'agit de lire 16, 32, 64, 128). Ces indicateurs sont utiles si vous souhaitez représenter compacte un ensemble de drapeaux en utilisant seulement 1 bit par drapeau.


"Vous pouvez utiliser des entiers ... mais vous pouvez également utiliser hexagonal." Vous impliquez qu'il existe une sorte de différence. Hex, octal, décimal, binaire, Hell Base36, ils sont toutes des représions différentes de la même valeur, dans ce cas une valeur entière. Le fait qu'elles utilisent une notation hexagonale associée aux valeurs initiales qu'ils ont choisies (1, 2, I.E. 0001, 0010) suggèrent qu'ils ont l'intention d'utiliser l'ENUM en tant que Bitfield. Pourquoi la nécessité de la notation hexagone? Probablement pour mieux transmettre l'intention de la construction.


En outre, un .net int est en fait un int32, non? Un Int signé 32 bits peut contenir entre 2 147 483,648 et -2 147,483,647 (0x80000000 et 0x80000001), votre exemple de valeur de 0x5000000 (1 342 177 77,280) ne devrait-il pas être gentiment, n'est-ce pas?


Oups, oui - je voulais inclure plus de zéros.


@RG - Tu m'avais vraiment confus pendant un moment là-bas ... je pensais que ton commentaire était de rj et je me demandais ce qui s'était passé !!



9
votes

Cela signifie simplement que si vous filtrez -> A, vous obtenez 1. Filtre-> B est 2.

La notation hexagonale étrange est juste que, notation. P>

EDIT: Comme il s'agit d'un "filtre", la notation hexagone a un peu plus de sens. P>

En écrivant 0x1, vous spécifiez le motif de bit suivant: p>

0000 0011


6 commentaires

Pourquoi ne pouvons-nous pas utiliser les entiers? Quelle était la nécessité d'utiliser la notation hexagone?


@RJ - Si vous envisagez d'être un développeur, vous feriez mieux de comprendre la notation hexagonale aussi facilement que vous comprenez décimal.


Je ne suis pas d'accord avec toi. Il n'y a absolument pas besoin de comprendre la notation hexagonale. Nous ne vivons pas dans le monde des 1 et 0 nous sommes dans la quatrième fois! Et il y a absolument il y a une façon de faire des choses.


@RJ - Greg B a raison. Si vous envisagez d'être un développeur, vous feriez mieux de comprendre la notation hexagonale (et l'octal ne ferait pas mal). Sinon, vous ne comprenez jamais ou ne sera jamais en mesure de déboguer un code qui exécute un fonctionnement logique et XOR biteux. Vous êtes une idée que cela est inutile est à peu près équivalente à exiger que ces opérateurs soient supprimés des normes de langue C ++ et C #.


D'une manière ou d'une autre, cela semble étrangement approprié: thedailywtf.com/forums/47608/ShowPost.aspx


Rj: lol, j'espère que tu plaisantes



0
votes

Ceux-ci ressemblent à ce qu'ils sont des masques bits de quelque sorte. Mais leurs valeurs réelles sont 1 et 2 ...

Vous pouvez affecter des valeurs à des énumes telles que: xxx

etc ...


0 commentaires

2
votes

0 commentaires

2
votes

Cela pourrait signifier quoi que ce soit. Nous devons voir plus de code puis pour pouvoir comprendre ce que ça fait.

0x001 est le numéro 1 . Chaque fois que vous voyez le 0x signifie que le programmeur est entré dans le numéro de Hexadecimal.


0 commentaires

0
votes

Utiliser une notation hexidécimale comme celle-ci indique généralement qu'il peut y avoir une certaine manipulation de bits. J'ai utilisé cette notation souvent lorsque vous traitez avec cette chose même, pour la raison même, vous avez posé cette question - cette notation est en quelque sorte sur vous et dit: «Faites attention à moi, je suis important!»


0 commentaires

0
votes

Eh bien, nous pouvons utiliser des entiers infompons, nous pouvons éviter tout comme la nature par défaut de Enum attribue 0 à son premier membre et une valeur incrémentée au prochain membre disponible. De nombreux développeurs utilisent cela pour frapper deux cibles avec un arc.

  • Complique le code rendant difficile la compréhension de
  • Plus rapidement que les performances comme codes hexagonales sont plus proches de binaires

    Mon point de vue est si nous utilisons toujours pourquoi nous sommes dans la langue de la quatrième génération, passez à nouveau à Binary à nouveau

    Mais sa technique assez meilleure à jouer avec les bits et le processus de cryptage / de décryptage


1 commentaires

"Plus vite la performance"? Vous plaisantez bien? Vous savez que l'IL est la même quelle que soit la notation que vous utilisez? Et si vous trouvez Hex difficile à comprendre, vous êtes vraiment dans le mauvais métier. Attendez juste que vous obtenez une certaine expérience, puis revenez et disons qu'il est inutile de comprendre tous les trucs de bas niveau. Ruby et Python et al ne sont pas faits de la poussière de fées magique que vous connaissez.



5
votes

Ce n'est pas clair ce que vous trouverez peu clair, alors discutons tout:

Les valeurs ENUM ont reçu des valeurs numériques explicites. Chaque valeur Enum est toujours représentée comme une valeur numérique pour le stockage sous-jacent, mais si vous souhaitez être sûr de ce que la valeur numérique est que vous devez le spécifier. P>

Les chiffres sont écrits en notation hexadécimale, ceci est Souvent utilisé lorsque vous souhaitez que les valeurs numériques contiennent un seul bit de jeu pour le masquage. Il est plus facile de voir que la valeur n'a qu'un seul bit défini lorsqu'il est écrit de 0x8000 que lorsqu'il est écrit sous forme de 32768. P>

Dans votre exemple, ce n'est pas aussi évident que vous n'avez que deux valeurs, mais pour filtrer le bit chacun La valeur représente un seul bit pour que chaque valeur soit deux fois plus grande que la précédente: p> xxx pré>

Vous pouvez utiliser une telle énorme pour filtrer les bits simples dans une valeur: P >

If ((num & Filter.First) != 0 && (num & Filter.Third) != 0) {
   Console.WriteLine("First and third bits are set.");
}


0 commentaires

1
votes

la raison principale est la suivante:

Il est facile de lire la notation hexadécimale lors de l'écriture de chiffres tels que: "2 à la puissance de x" est nécessaire.

Pour utiliser le type Enum comme drapeau de bit, nous devons augmenter les valeurs Enum par puissance de 2 ... 1,2,4,8,16,32,64, etc. pour le garder lisible, la notation hexagonale est utilisée.

ex: 2 ^ 10 est 0x10000 en hexagonal (soigné et propre), mais il est écrit 65536 dans la notation décimale classique ... même pour 0x200 (notation hexagonale) et 512. (2 ^ 9)


0 commentaires