bloghissimo

Aggregatore

Ti piace il blog? condividilo!

Calendario

February 2012
M T W T F S S
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        
<< < > >>

Sondaggio chiuso..

Ragazzi lo tolgo solo ora che ho rincominciato a scrivere
naturalmente il sondaggio è chiuso e la pagina con i torrent
è raggiungibile al seguente indirizzo: http://lolunix.altervista.org/down.html
è sempre in costante aggiornamento se volete potete consigliarmi un film :)

Il forum!

Nuovo forum dedicato all'ionformatica
mi raccomando aiutate a farlo crescere.
Monday 16 january 2012 1 16 /01 /Gen /2012 16:17

Bene continuiamo il discorso degli operatori con gli ultimi 2 punti in scaletta che ci mancavano ovvero:

 

6)operatori per la manipolazione dei bit

7)operatori di assegnamento ed espressioni

 

6)

Il C prevede sei operatori per la manipolazione dei bit, applicabili solo a operandi interi, ovvero quelli ti tipo char,short,int e long con o senza segno.

 

Essi sono:

 

1) & AND logico bit per bit

2) | OR logico bit per bit

3) ^ OR logico esclusiovo bit per bit

4) << scorrimento verso sinistra

5) >> scorrimento verso destra

6) ~ completamento a uno (unitario)

 

vediamo degli esempi:

/* FONTE DA WIKIPEDIA */

Gli operatori OR e AND hanno lo stesso funzionamento degli operatori logici, la differenza è che questi operano sui bit.

È stato aggiunto l'operatore XOR (OR esclusivo), che restituisce vero se solo 1 operando è vero. Funziona così:a b c=a^b
0 0 0
0 1 1
1 0 1
1 1 0


Esempi

OR
int a=147;
int b=97;
int c=a|b; //OR
printf("c è uguale a %d", c);

Il risultato sarà: c è uguale a 243, perché:128 64 32 16 8 4 2 1
1 0 0 1 0 0 1 1
0 1 1 0 0 0 0 1

1 1 1 1 0 0 1 1


AND
int a=147;
int b=97;
int c=a&b; //AND
printf("c è uguale a %d", c);

Il risultato sarà: c è uguale a 1, perché:128 64 32 16 8 4 2 1
1 0 0 1 0 0 1 1
0 1 1 0 0 0 0 1

0 0 0 0 0 0 0 1


XOR
int a=147;
int b=97;
int c=a^b; //XOR
printf("c è uguale a %d", c);

Il risultato sarà: c è uguale a 242, perché:128 64 32 16 8 4 2 1
1 0 0 1 0 0 1 1
0 1 1 0 0 0 0 1

1 1 1 1 0 0 1 0

 

Scorrimenti:

Gli operatori di scorrimento a destra e a sinistra fanno scorrere i bit della variabile specificata come primo operando verso destra o verso sinistra per il numero di volte specificato dal secondo operando. I bit fuoriusciti non rientreranno dall'altra estremità, ma andranno persi.

Il complemento a uno, invece, ha un funzionamento molto semplice. Esso inverte i bit, ovvero trasforma gli 1 in 0 e gli 0 in 1.

Esempi

Scorrimento a sinistra
int a=42;
int c=a<<1; //Scorrimento a sinistra
printf("c è uguale a %d", c);

Il risultato sarà: c è uguale a 84, perché:128 64 32 16 8 4 2 1
0 0 1 0 1 0 1 0

0 1 0 1 0 1 0 0


Scorrimento a destra
int a=42;
int c=a>>1; //Scorrimento a destra
printf("c è uguale a %d", c);

Il risultato sarà: c è uguale a 21, perché:128 64 32 16 8 4 2 1
0 0 1 0 1 0 1 0

0 0 0 1 0 1 0 1


Complemento a uno
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
unsigned char i=10;
unsigned char j =~i;
printf("%u", j);
}

Il risultato sarà 245, perché:128 64 32 16 8 4 2 1
0 0 0 0 1 0 1 0

1 1 1 1 0 1 0 1

/* FINE PARTE PRESA DA WIKIPEDIA */

 

Ora vediamo una funzione che strae n bit di y a partire dalla posizione x

 

/*estraibits */

unsigned estraibits (unsigned y, int x,int n)

{

return (y >> (x+1-n)) &  ~( ~ 0 <<n);

}

Questa funzione restituisce n bit consecutivi di n a partire dalla posizione x allineando il risultato a destra. E' un modo per fare un esempio degli operatori.

7) le espressioni in generale

Detta in breve le espressioni servono per verificare delle condizioni più o meno complesse, oppure per eseguire calcoli matematici.

Facciamo un esempio di espressione:

in matematica la scriveremo cosi:

x = x * (y + 1)

in C si potrebbe scrivere anche cosi volendo:

x *= y+ 1

e cosi via, ma vediamo un utilizzo concreto delle espressioni con la funzione contabit che conta i bit pari a 1 di y:

int contabit (unsigned y)

{

int b;

for (b = 0; y != 0; x >>= 1)

if (x & 01)

b++;

return b;

}

 

un altro tipo di espressione che sicuramente avrete visto in molti listati è questa:

while((x = getchar()) != EOF)

questa espressione cattura l'input fino a quando la variabile x non è piena.

C'è da parlare anche  delle espressioni condizionali che pongono una condizione con le istruzioni if-else eccone un esempio:

if ( a > b)

z = a;

else

z = b;

 

come vedete il concetto è davvero semplice se a è maggiore di b prende la decisione che z è uguale ad a oppure z è uguale a b :).

 

Bene finisce qui la guida agli operatori del C :) quindi il 3 capitolo, durante la settimana pubblicherò la tabella degli operatori e le precedenza che loro hanno. (Prendetala come una appendice :))

Di lolunix - Pubblicato in : informatica in generale.. - Community : La musica che gira intorno
Scrivi un commento - Vedi 0 commenti
Torna alla home

codice sorgente

Aggregatore Online

Testo Libero

Presentazione

Crea un Blog

Crea un blog gratis su over-blog.com - Contatti - C.G.U. - Remunerazione in diritti d'autore - Segnala abusi - Articoli più commentati