P2 01 02 AC (PDF)




File information


Title: Operatori logici e bitwise in C
Author: prof. M. Rizzardi

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
















File preview


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
.






Download P2 01 02 AC



P2_01_02_AC.pdf (PDF, 208.54 KB)


Download PDF







Share this file on social networks



     





Link to this page



Permanent link

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..




Short link

Use the short link to share your document on Twitter or by text message (SMS)




HTML Code

Copy the following HTML code to share your document on a Website or Blog




QR Code to this page


QR Code link to PDF file P2_01_02_AC.pdf






This file has been shared publicly by a user of PDF Archive.
Document ID: 0000158707.
Report illicit content