All pastes #773138 Raw Edit

Something

public text v1 · immutable
·published 2007-11-14 09:04 UTC
rendered paste body
/******************* manipbits.cpp *****************/
/* YAKOUBENE Karim			                       */
/* NICOLLE Raphael                                 */
/* Manipulation de Bits                            */
/* repertoire: /                                   */
/* Formation: ASPE                                 */
/* Date: 13/11/2007                                */
/* Description:                                    */
/***************************************************/

#include <iostream>
using namespace std;

const int tailleint = 8 * sizeof(int);

void aff_bits( int n ); // affiche la representation binaire de "n"
int inverse( int x, int p, int n ); // complmente les n bits de x  partir du bit  la position p
int rot_droite( int n, int b ); // permutation circulaire vers la droite de b bits d'un entier n

int main()
{
	int x, n, p, b;
	cout << "Entrer un nombre:" << endl;
	cin >> x;
	cout << "Aff_Bits" << endl;
	aff_bits( x );
	cout << "Inverse" << endl;
	cout << "Entrer la position a partir de laquelle complementer le nombre:";
	cin >> p;
	cout << "Entrer le nombre de bits a complementer:";
	cin >> n;
	x = inverse( x, p, n );
	aff_bits( x );
	cout << "Rot_Droite" << endl;
	cout << "Entrer le nombre de bits  permuter vers la droite:";
	cin >> b;
	x = rot_droite( x, b );
	aff_bits( x );
	return 0;
}

void aff_bits( int n )
{
	unsigned int bit;
	unsigned int masque = 1;
	for ( int k = 0; k < tailleint - 1; k++ ) masque <<= 1; // permet de dcaler le 1 vers la gauche;
	for ( int i = 0; i < tailleint; i++ )
	{
		bit = n & masque; // ce masque permet de dterminer la valeur du premier bit de n en mettant tous les autres  zro
		if ( bit != 0 ) bit = 1;
		cout << bit << " ";
		n <<= 1;
	}
	cout << endl;
}

int inverse( int x, int p, int n )
{
	unsigned int position = 1; // variable permettant de positionner le premier bit "1"  la position p
	int nb = 1; // compteur permettant l'ajout d'un bit "1" aprs la position p dans le masque
	for ( int i = 0; i < p - 1; i++ )
	{
		position <<= 1;
		if ( nb < n )
		{
			position += 1;
			nb++;
		}
	}
	x ^= position;
	return x;
}

int rot_droite( int n, int b )
{
	unsigned int masque = 1;
	masque &= n;
	for ( int k = 0; k < tailleint - 1; k++ ) masque <<= 1;
	for ( int i = 0; i < b; i++ )
	{
		n <<= 1;
		if ( masque == 1 ) n |= masque;
	}
	return 1;
}