Question

Question originale a changé.

Je veux au niveau du bit le plus désactiver bit à gauche d'une valeur à court (et H8000) et laisser les autres bits comme ils sont.

Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)

est-il pas de chemin plus court avec les opérateurs binaires?

Quand je fais

Dim a = Short.MaxValue Or &H8000

J'obtiens une erreur du compilateur, cuz il va, au lieu de la nier.

Était-ce utile?

La solution

C'est parce que .NET utilise le complément de deux, pas l'ampleur signé. Nier, vous devez retourner tous les bits, puis ajouter un.

S'il vous plaît il suffit d'utiliser le moins unaire. S'il vous plaît ... Jolie s'il vous plaît.

EDIT: Si pour une raison étrange, il fallait le faire avec les opérations de manipulation de bits, vous devez faire ceci:

Dim somewhatCorrect = (Short.MaxValue xor Short.MinValue) + 1;

qui est bien sûr toujours pas parce que deux la bitwise négation du complément de ne peut pas être efficace avec des opérateurs fait au niveau du bit.

EDIT2: Et voici un moins unaire:

Dim correct = -Short.MaxValue;

EDIT3: En réponse à la question éditée :

Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue

Autres conseils

Complément à deux

Dim testV As Short = &HD555S 'a test value

Dim twosC As Short 'twos comp

twosC = (testV Xor &HFFFFS) + 1S 'reverse the bits, add 1

Changement bit le plus significatif

twosC = twosC Xor &H8000S
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top