This PDF 1.4 document has been generated by Acrobat PDFMaker 8.1 per PowerPoint / Acrobat Distiller 8.2.6 (Windows), and has been sent on pdf-archive.com on 23/04/2014 at 11:50, from IP address 151.70.x.x.
The current document download page has been viewed 498 times.
File size: 208.54 KB (17 pages).
Privacy: public file
a
i
c
i
o
t
i
d
a
r
Unità didattica: Operatori bitwise: esempi
[2-AC]
r
o
m
t
r
a
a
o
f
r
z
n
o
I
z
n
ab
i
i
L
le
R
a
e
Titolo: Esempi di applicazione
degli
operatori
bitwise
n
a
n
I
e
i
i
I
r
r
t
0
e
a
a
1
e
Argomenti trattati:
n
0
r
s
o
2
u
/ di tipo char
i 8 bit di o
9 Visualizzazione
degli
una variabile
a
9
z
0 2 mediante operatori di shift
L
ae divisione r
9 Moltiplicazione
intera per
0
2
a
m
.
9 Scambio m
del contenutoidi due
variabili senza variabile d’appoggio
A
.
a
9 Uso dircostanti
ottaliro esadecimali
per azzerare parte di una
A
a
g
variabile
o
M
r di “maschere”
9 Uso
. per estrarre alcuni bit da una variabile
P f
o
r
p
P2_01_02.11
P2_01_02.
[P2_01]
Prerequisiti richiesti: fondamenti del linguaggio C, operatori bitwise
Operatori bitwise
…
i
d
(prof. M. Rizzardi)
Modulo: Approfondimenti sul linguaggio C:
operatori binari
P2_01_02.2
2
P2_01_02.
Operatori bitwise
i
d
r
a
z
z
i
printf("char = %c\tdec
=i %d\thex
= %02x\n",C,C,C);
e
L
l
R
a
}
e
n
a
n
I
e
i
i
I
r
r
t
0 hex = 7a
a = z ne dec a
= 122
output char
1
e
0
r
s
o
2
u
/
i
o
a
9
z
0 \thex = %02x\n",C,C,C);
L "chara= %c\tdec
r
0
printf(
= %d
2
a
m
.
i
m
A
.
r
a
visualizza come
carattere
A
r
a
g
M
visualizza
in decimale
ro
P f.
visualizza in esadecimale
o
r
p
come visualizzare in binario?
(prof. M. Rizzardi)
Come visualizzare in C il contenuto di una variabile char
?
char?
…
i
a
d
c
#include <stdio.h>
i
o
t
i
a
r
void main()
o
m
t
r
{unsigned char C;
a
o
f
r
n
o
I
C='z';
ab
in
o
r
p
C=Z<<4; C=C>>4;
P2_01_02.3
3
P2_01_02.
Operatori bitwise
i
a
d
i
c
i
o
t
esempio Z=‘z’;
i
‘z’
7 A16 a 0111r1010
2 d
r
o
m
t
r
a
a
o
f
r
suggerimento:
z
n
o
I
z di 4 bit)
1.
separare le singole cifre
(gruppo
n esadecimali
bit);;
ab
i
i
L
ledi ognie cifra
2.
convertire il valore
nellaR
stringa di bit
a
n
a
n
corrispondente.
I
e
i
i
I
r
r
t
0
e esadecimali
asingole ncifre
a
1
1. separare le
;
esadecimali;
e
0
r
s
o
2
u
/
i
o
a
9
z
0
L 1010
a
come?
r
=
7
0111
0000
0111
0
2
a
m
.
i
m
A
.
r
a
C=Z>>4;
A
r
a
g
M
ro
P 0111f.1010
0000 1010 =10 come?
(prof. M. Rizzardi)
Esempio 1:
Come aggiungere all
’output, mediante operatori
all’output,
bitwise
un char
?
bitwise,, la visualizzazione degli 8 bit di …
char?
‘z’
7 A 16
…
i
d
“0001”
a
i
c
“0010
”
i
o
t
i
d
a
r
0111
1010
“0011”
r
2o
m
t
r
a
a
o
f
r
“0100”
z
n
o
I
ab
iz “0101”
in
L
le
R
a
e
C=Z>>4;
a
0000 0111 =7ienn
I
i
...bit[C]
bit[
7
]
I
r
r
t
0
e
a
a
1
e
n
0
r
s
o
2
u
/
i
o
a
9
z
C=Z<<4;
0
L
a
r
0
bit[10]
2
C=C>>4;
a
m
.
=10 i .A
0000 1010
m
...bit[C]
r
a
A
r
a
g
M
ro
.
P f
3. usare o
il valore ottenuto direttamente
r
come
’array bit di stringhe;
nell’array
p indice nell
“0110”
“0111”
“1000”
“1001”
P2_01_02.4
4
P2_01_02.
“0000”
Operatori bitwise
esempio
bit
“1010”
“1011”
“1100”
“1101”
“1110”
“1111”
(prof. M. Rizzardi)
2. convertire il valore di ogni cifra
nella stringa di bit corrispondente;
P fchar = z
o
output
r
p
dec = 122
hex = 7a
bin = 0111 1010
P2_01_02.5
5
P2_01_02.
a
i
c
i
... void main()
o
t
i
d
a
r
{unsigned char bit[16][4]={ '0','0','0','0', '0','0','0','1',
'0','0','1','0',
'0','0'
,'1','1',
r
o
m
t
r
a
a
o
'0','1','0','0', '0','1','0','1',
'0','1','1','0',
'0','1'
,'1','1',
f
r
z
n
'1','0','0','0',n I'1','0','0','1',bo'1','0','1','0',z '1','0','1','1',
a
i
i
'1','1','0','0',
'1','1','0','1',
'1','1','1','0',
'1','1','1','1'};
e
L
l
R
a
e
unsigned char C, dx, sx;
n
a
n
I
e
i
i
C = 'z';
I
r
r
t
0
e
sx=C>>4;
a
a
1
e
n
0
r
s
o
2
dx=(C<<4); dx=dx>>4;
u
/
i
o
a
9
z
0
printf("char =L%c\tdec =a%d\thex = %02x
\n",C,C,C);
r
0
2
a
m %c%c%c%c
.
printf("\t\tbin = %c%c%c%c
\
n"
,bit[sx][0],bit[sx][1],bit[sx][2],bit[sx][3],
i
m
A
.
r
a
bit[dx][0],bit[dx][1],bit[dx][2],bit[dx][3]);
A
r
a
g
}
o
M
r
.
Operatori bitwise
…
i
d
(prof. M. Rizzardi)
versione semplificata
P 11f: 8 = 1
11 × 2 = 22
o
r
11 × 4 = 44
p11 × 8 = 88
n << 1 = 22
n << 2 = 44
n << 3 = 88
P2_01_02.6
6
P2_01_02.
Operatori bitwise
i
o
t
i
d
a
r
r
o
m
...
t
r
a
a
ovoid main()
f
r
z
n
o
I
b n=11; iz
{
short
n
a
i
equivale a moltiplicare per 2 e
L
l
printf("n >>
1 = %d\n",n>>1);
R
a
<< 110 1001 1011n0101
n 0 e printf("n
>> 2 = %d\n",n>>2);
a
I
e
i
i
I
r
printf("n
>> 3 = %d\n",n>>3);
r
t
0110 1001a 1011
0101
0
e
a
1
printf("n
<< 1 = %d\n",n<<1);
e
n
0
r
s
o 010 o printf("n
2
>> 00110au1001 1011
/
i
<< 2 = %d\n",n<<2);
9
z
0printf("n << 3 = %d\n",n<<3);
L
a2
r
0
equivale a dividere
per
2
a
m
.
i
}
m
A
.
r
a
A 11 : 2 = 5 n >> 1 = 5
r
a
g
n >> 2 = 2
11 : 4 = 2
M
ro
n >> 3 = 1
.
(prof. M. Rizzardi)
Esempio 2:
Gli operatori di shift (<<
,>>) sono utili
<<,>>
per descrivere ll’effetto
’effetto di moltiplicazioni
…
i
o divisioni intere peri2
ca(base) d
P2_01_02.7
7
P2_01_02.
Operatori bitwise
i
d
r
a
z
n
o
I
b
z
n
a
i
i
Dalle proprietà di XOR:
bit (cioè X∈ {0, 1})
XOR seeX è un qualsiasi
L
l
R
a
e
n
X ^ 1 =n~X
^1 inverte X)
(cioè X
a
I
e
i
i
X ^ t0r = X I
X^0 lascia X immutato)
(cioè
r
0
e
a
a
1
e
n
si possono scambiare
i valori di
due 0variabili senza usarne
r
s
o
2
u
/
i
o
a
una terza di appoggio.
L
az x r0 020090 0 0 1 1 0
a A.
i
int x,y;mm
.
r
a
y
1
A 0 1 1 1 0 1 0
r
x=…; g
y=…;
a
M
x 1 0 1 1 1 1 0 0
x=x^y;
ro
.
P
f
y=x^y;o
y 0 0 0 0 0 1 1 0
r
x=x^y;
x 1 0 1 1 1 0 1 0
p
(prof. M. Rizzardi)
Scambio del contenuto di due variabili
senza variabile di appoggio
…
i
a
d
c
int x,y,temp;
i
o
t
i
a
r variabili
x=…; y=…;
swap
ditdue
o
m
temp=x; x=y; y=temp; for
ra
Esempio 3:
P2_01_02.8
8
P2_01_02.
Esempio 4:
Gli operatori bitwise possono servire per
azzerare i bit meno significativi…di una
i
variabile qualunque sia
la
sua
lunghezza
a
d
ic
costante
otta
costante
.
P
mi 6 bit di X
mi
8
bit
di
X
f
le (inizia con 0)
esadecimale
o
r
p *ora è indipendente dal tipo di X
(prof. M. Rizzardi)
Operatori bitwise
i
i
o
t
i
d
a
r
r
m 6 bittdio X
per azzerare gli ultimi
r
a
a
o
f
r
z
char X; X=125; 1 1 1 1In1 1 0 b1o
z
n
a
i
i
X = X & 0300
1 1 0 0 0 0 0 0
L
le
R
a
e
n dipende dallaalunghezza di X
… però la costante
n
I
e
i
i
I
r
0 1 1 1 0 0 0 t1 1 1 0 0 0 1 0r 1 short X; X=29125;
0
e
a
a
1
e
1 1 1 1 1 1 r 1 1 1 1n 0 0 0 s0 0 00 X = X & 0177700
o
2
u
/
i
o
a
9
0
L
az
r
0
2
a
m
.
i
am~077ar A.A X = X & ~0xff
X = X r&
ling. C
g
o
r* gli ulti-M
azzera
azzera* gli ulti-
Gli operatori bitwise possono servire per
estrarre alcuni bit di una variabile…
P2_01_02.9
9
P2_01_02.
Esempio 5:
P f
o
r
p
ling. C
if (X & 240)…
24010 = 27 + 26 + 25 + 24 = f 016
(prof. M. Rizzardi)
Operatori bitwise
i
a
d
i
Proprietà: se X è un qualsiasi bittic
o
i
d
a
r
o0 = 0 r
X&1 = X rm X&
t
a
a
o
f
r
X | 0 = Xz
X | 1 = 1In
o
ab X^ 0i=zX
X^ 1e=in~X
L
l
R
a
Gli operatori sui singoli
bit
sono
utili
quando si vogliano
e
n
a
n bit (mediante
I
e
i
estrarre particolari
ll’uso
’uso di maschere
maschere)) dal
i
I
r
r
t
valore di una variabile
0
e
a
a
1
e
n
0
r
s
o
2
u
/
i
o
a
9
z
L
X 0110r1001001011 0101
a
&m
2
a
.
i
m
A 1111 0000 240
mask
0000
0000
.
r
a
A
r
a
g
= 0000 0000 1011 0000
M
ro
.
P2_01_02_AC.pdf (PDF, 208.54 KB)
Use the permanent link to the download page to share your document on Facebook, Twitter, LinkedIn, or directly with a contact by e-Mail, Messenger, Whatsapp, Line..
Use the short link to share your document on Twitter or by text message (SMS)
Copy the following HTML code to share your document on a Website or Blog