Voir les bit d'un long

alphaone Messages postés 134 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 14 novembre 2009 - 22 févr. 2006 à 09:59
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007 - 22 févr. 2006 à 18:56
Comment voir chaqu'un des bit d'un long?

4 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
22 févr. 2006 à 10:05
Faut que tu le convertisse en binaire.
Le plus simple pour ca est d'utiliser un modulo 2.
Ensuite complete avec des zéros sur la gauche pour arriver a 32 bits (taille d'un long)

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 févr. 2006 à 10:46
Par masque binaire 0x80000000 pour tester le bit haut, cela en boucle et décalage gauche.

void __stdcall LongToFullBin(long n, char *psz)
{
long shft = 32;
do {
*psz++ = (n & 0x80000000) ? '1': '0';
n <<= 1;
} while(--shft);
*psz = 0;
}

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
22 févr. 2006 à 12:43
De manière générale:

long n;

BOOL bit(long n , int numero_bit) // numero_bit 0> poids faible
{
long i=1; i<<=numero_bit;
return (n&i);
}
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
22 févr. 2006 à 18:56
bonjour,
version pour système 32 bits, 64 bits etc... :

#include <stdio.h>
unsigned long g_Mask = ~0 << (sizeof(long) << 3) - 1;

void __stdcall ConvToBin(long n, char *psz)
{
static unsigned long Mask;

Mask = g_Mask;

while(Mask)
{
*psz++ = n & Mask ? '1' : '0';
Mask >>= 1;
}
*psz = 0;
}

int main()
{
static char szTab[64];
long ul = 0;
long ulMax = 64;

while(ul < ulMax)
{
ConvToBin(ul++, szTab);
printf("%s ", szTab);

if(!(ul % 2))) printf("\r\n");
}

return 0;
}

bye.
0
Rejoignez-nous