BITET (BITET, fonction)

Bonjour à tous,

je veux la fonction BITET(nombre1, nombre2)

Mais mon problème le nombre2 est négatif.

donc cette fonction ne marche pas car Nombre2 doit être au format décimal et supérieur ou égal à 0.

Comment, je pourrais faire ET logique entre deux nombre ?

bonjour

à tester

remplace ton nombre négatif par 2^48 - valeur absolue de ton nombre négatif+1

exemple pour 123 et -456

=bitet(123;2^48-456+1)

je viens de tester

Il me semble que cela ne marche pas !!

La formule que je veux faire est Wyyyy AND (-1-Wxxx) ==> Résultat

Wyyy est le premier nombre.

Wxxx est le deuxième nombre

L’opération (-1-Wxxx) est pour faire un complément à 2 du nombre. C'est a dire cela inverser tous les bit du nombre

Bonjour,

Il ne s'agit donc pas d'une fonction ! Je me demandais d'ailleurs quelle elle était ! Mais l'opérateur And pour une comparaison au niveau du bit.

Si c'est bien cela, il me semble que le signe n'intervient pas dans le résultat de la comparaison :

1 And 3 et 1 And -3 donneront le même résultat.

Si tu précisais le contexte de ton utilisation et son objectif, on pourrait peut-être y voir plus clair...

Cordialement

Ferrand

Bonjour,

tu pourrais faire un bitet() sur les valeurs absolues et t'occuper du signe séparément :

=BITET(ABS(A1);ABS(B1))*MIN(SIGNE(A1)+SIGNE(B1)+1;1)
ou
=BITET(ABS(A1);ABS(B1))*(-(A1<0)*(B1<0)*2+1)

Mais comme pour excel ce sont des entiers signés, ça reste des entiers signés jusqu'au bout. A toi d'interpréter le bit de poids fort (bit de signe)

Il faut 2 "-" pour faire "-"

eric

je viens de tester

Si A1 = 45 soit 0000 0000 0010 1101 en Binaire

Si B1 = -1 soit 1111 1111 1111 1011 en binaire

A1 AND B1 = 0000 0000 0010 1001 soit 41.

Avec les deux formules le résultat est 5 soit 0000 0000 0000 0101

donc j'ai un bug !!!

Non tu n'as pas de bug, c'est moi qui n'est pas parti sur un complément à 2 pour les négatifs donc c'est tout faux...

Sorry

Pour -1 ça serait plutôt que des 1

Ce qui ferait 101101 soit 45 non ?

eric

je viens de trouver une solution

J'ai fait une fonction en VBA

Function MyAnd(a As Integer, b As Integer)
    MyAnd = a And b
End Function

J'ai un bon résultat

Je vais tester avec d'autre valeur pour confirmer

J'ai édité au dessus, dis-moi si je me trompe.

Oui par macro ça sera possible.

Pour l'instant je préfère réfléchir avec les fonctions disponibles, ça me rafraichit la mémoire c'est trop vieux tout ça...

Il faudrait savoir sur combien de bits maxi tu dois travailler. Les fonctions de conversion sur excel sont limitées à 10 bits

jeanmy21 a écrit :

je viens de tester

Si A1 = 45 soit 0000 0000 0010 1101 en Binaire

Si B1 = -1 soit 1111 1111 1111 1011 en binaire

A1 AND B1 = 0000 0000 0010 1001 soit 41.

Avec les deux formules le résultat est 5 soit 0000 0000 0000 0101

donc j'ai un bug !!!

Oups je viens de voir que je me suis tromper B1 = -5 et non -1

Ci-joint mon fichier

31classeur1.xlsx (9.72 Ko)

Tu as un onglet 'Ajouter des fichiers' sous ton message en édition.

Mais c'est bon avec ta fonction personnalisée. And en vba fait bien en bit à bit.

eric

Ci-joint mon fichier

14classeur-macro.xlsm (14.30 Ko)

cela marche bien sur des mots 8 bits

Ok.

Quand tu enregistres un fichier avec macro il faut l'enregistrer avec le type .xlsm sinon tes macros ne sont pas enregistrées.

eriiic a écrit :

Ok.

Quand tu enregistres un fichier avec macro il faut l'enregistrer avec le type .xlsm sinon tes macros ne sont pas enregistrées.

Oui je viens de le corriger

Rechercher des sujets similaires à "bitet fonction"