Wikio

sponsor! xD

Calendario

January 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
30 31          
<< < > >>
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
Monday 9 january 2012 1 09 /01 /Gen /2012 13:37

Dopo le vacazne natalizie che mi sono concesso torno a stilare la guida in C che avevo cominciato :), parlando degli operatori. A che servono inanzi tutto? servono per poter confrontare, per vedere se una variabile è diversa da un altra, cosi da prednere decisioni oppure per esguire calcoli, quindi sono molto importanti per ogni linguaggio di programmazione ed il C non è escluso, in questa guida base del C parleremo degli operatori base ovviamente dandone solo una infarinatura. Dato l'importanza dell'argomento ho deciso di spezzare l'articolo in 2 parti.. :)

 

Quanti tipi di operatori ci sono?:

 

1)operatori aritmetci

2)operatori relazionali

3)operatori logici

4)operatori di incremento

5)operatori di decremento

6)operatori per la manipolazione dei bit

7)operatori di assegnamento ed espressioni

 

 ora analizziamo gli operatori:

1)  OPERATORI ARITMETICI:

sono quelli che ci consentono di eseguire calcoli matematici ed essi sono +,-,*,/,%.

prendiamo ad esempio:

x % a

 

dà per risultato il resto della divisione, può dare zero se ad esempio a divide x esattamente.

 

Un esempio pratico di programmazione:

proviamo a vedere quando un anno è bisestile o meno con questo spezzono di codice:

 

if (( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0)

{

printf("%d questo anno e' bisestile\n", anno);

} else {

printf("%d questo anno non e' bisestile\n", anno);

}

 

un anno è bisestile quando lo si può dividere per 4 ma non per 100, salvo gli anno divisibili per 400 che sono anche essi bisestili, ed ecco da cosa nasce questo codice..:)

 

alcune note:

1)l'operatore % non può essere applicato a valori float o double ma solo gli interi.

2)gli operatori binari + e - hanno lo stesso grado di precedenza, inferiore a quello di *,/,%.

3)gli operatori aritmetici si raggruppano da sinistra a destra.

 

2-3) OPERATORI RELAZIONALI E LOGICI:

Gli operatori di relazione sono >, >=, <, <=  questi operatori hanno tutti uguale precedenza ma sono appena più bassi degli operatori di uguaglianza o disuguaglianza come ==, !=.

 

Per capire questi operatori logici proviamo a vedere uno spezzone di coidce che immette valori in un vettore solo se in esso c'è spazio:

for(i=0; i<limite-1 && (c=getchar()) != EOF && x != '\n'; ++i){

s[i] = x;

}

rileggendo in alto abbiamo incontrato a nostra insaputa degli operatori logici che sono &&  || e !

 La valutazione di tali operatori si interrompe non appena l'espressione diventa vera o falsa.

Proviamo ora a vedere 2 esempi concreti:

convertire una stringa di cifre nel suo corrispondente numerico con la funzione convert:

/* funzione che converte s in un intero */

int convert(char s[])

{

int i,n;

 

n = 0;

for (i = 0, s[i]  >= '0' && s[i] <= '9'; i++){

n = 10 * n + (s[i] - '0');

 

return n;

}

con l'espressione s[i] - '0'  si ha il valore numerico del carattere contenuto in s[i] perché i valori di '0','1' e cosi via formano una successione crescente di interi consecutivi.

ora vediamo un altro esempio di conversione da un tipo char ad un tipo int ad esempio, prendiamo ad esempio la funzione trasforma che serva a portare un carattere in minuscola nel set di carattere ASCII. Se il carattere non è una lettera maiuscola lo lascia stare.

 

/* converte c in minuscola solo per tabelle ASCII */

 

int trasforma (int c)

{

if (c >= 'A' && c <= '>')

return c + 'a' - 'A';

else

return c;

}

(ALTRI ESEMPI VERRANNO PRESENTATI NELLA 2 PARTE)

 

4-5) OPERATORI DI INCREMENTO E DECREMENTO

Gli operatori di incremento e decremento sono rispettivamente ++ e --  esse si dividono in post o pre incremento un esempio di post incremento può essere

x = n++;

 

o di pre incremento invece può essere scritto cosi:

 

x = ++n;

 

rispettivamente il primo caso l'incremento avviene dopo l'impiego del valore nel secondo caso prima dell'impiego del valore, restituendo valori diversi infatti nel primo caso assumendo che il valore di n sia 4 il valore di x sarà 4 nel secondo ivece sarà 5.

 

Proviamo a vedere la funziona elimina che elimina appunto tutte le lettere c da una stringa ad esempio s:

 

void elimina (char s[], int c)

{

int i,j

 

for ( i = j = 0; s[i] != '\0'; i++)

if (s[i] != c)

s[j++] = s[i];

s[j] = '\0';

}

 

Bene i punti 5 e 6 ne parleremo nella 2 parte :) spero che questa sia stata di vostro gradimento! :)

Di lolunix - Pubblicato in : informatica in generale.. - Community : La musica che gira intorno
Scrivi un commento - Vedi 0 commenti
Wednesday 4 january 2012 3 04 /01 /Gen /2012 09:27

Film consigliato da danilo!

Buona visione :)

Di lolunix - Pubblicato in : Film!
Scrivi un commento - Vedi 0 commenti
Monday 2 january 2012 1 02 /01 /Gen /2012 15:03

Film segnalato da Martina :)

Consiglio per una visione migliore di guardare a schermo intero

Di lolunix - Pubblicato in : Film! - Community : La musica che gira intorno
Scrivi un commento - Vedi 0 commenti
Monday 2 january 2012 1 02 /01 /Gen /2012 14:55

Film consigliato da Martina

Guardate a schermo intero per una visione migliorre :)

Di lolunix - Pubblicato in : Film! - Community : La musica che gira intorno
Scrivi un commento - Vedi 0 commenti

codice sorgente

Aggregatore Online

indicizzazione motori di ricerca


Cynegi Network

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