Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

I HC QUC GIA TP H CH MINH

TRNG I HC CNG NGH THNG TIN

THC HNH LP TRNH H THNG

LAB 1: BITS MANIPULATION


I. MC TIU
- Tm hiu cc php ton trn cc bit nh phn gm: logic, dch, tnh ton...
- Nm vng cc kin thc v lp trnh tng tc bit nh phn trn C
- Thc hnh gii cc bi ton v bit nh phn
II. YU CU 1 TM HIU CC PHP TON TRN CC BIT NH PHN
Bi lab ny tp trung ch yu vo k thut thay i gi tr cc bit ca bin Integer trong ngn
ng C. Sinh vin s hon thnh bi lab thng qua vic gii cc cu ca bi lab, sau
vit li p n trong mt chng trnh C/C++ hon chnh.
Bi lab l mt lot cc cu , gii cc cu , sinh vin cn vn dng kin thc trong
Chng 2 mn Lp trnh H thng mng. C th tham kho thm sch Computer
System: A Programmers Perspective (CSAPP).
Trong qu trnh gii bi, sinh vin ch s dng cc ton t ! & | + << >> v khng c
dng cc php lp trnh cu trc (control structures) nh loop, conditionals, switch
Bi lab bao gm 2 phn chnh, phn 2.1 v 2.2 l phn c bn, phn 2.3 l phn nng cao
ly trn im.
Mi cu trong cc mc 2.1, 2.2, 2.3 bao gm 4 ni dung chnh:
Tn hm: Tn ca hm v gi tr tr v cha ni dung li gii.
Yu cu thc thi: Yu cu cn t c khi gii cu , trong bao gm cc php
th mu dng cho vic nh gi im s (vi PT l vit tt ca Php Th).
im nh gi: Mc im nh gi cho mi cu , mc im cao hn cho bit cu
kh hn.
Max Ops: S lng ton t ti a c php s dng trong qu trnh lp trnh gii
cu . Nu s ton t s dng vt qu s lng ny, v nu c kt qu ng, im
nh gi s b chia i.
Sinh vin gii bi lab bng cch vit li cc hm thc hin cc yu cu trong cc phn 2.1,
2.2 v 2.3, lu di dng MSSV_cssapLab1.cpp.
V d:

bool bitAnd( int x, int y){



return ;
}

2.1 Simple Bit Manipulation

Tn hm Yu cu thc thi im Max Ops

boolean bitAnd(x,y) Thc thi x & y ch dng ton th | v ~ 1 8


PT: bitAnd(3, -9) == (3 & -9)

integer getByte(x,n) Ly byte th n t bin x. 2 6


PT: getByte(0x11223344, 1) == 0x33

integer Dch phi lun l mt s m 4 20


logicalShift(x,n) PT: logicalShift(-1,2) == 0x3fffffff

integer bitCount(x) m s lng bit mang gi tr 1 ca mt s 4 40


8bit.
PT: unsigned char x = 0xd7 bitCount(x) == 6
&& bitCount(0) == 0

integer bang(x) Tnh gi tr ca !x khng dng ton t ! 4 12


PT: bang(0) == 1 && bang(-1) == 0

2.2 Twos Compliment Arithmetic

Tn hm Yu cu thc thi im Max Ops

integer tmin() Tr v gi tr s m nh nht trong h 32bit 1 4


PT: tmin() == 0x80000000
integer divpwr2(x,n) Tnh gi tr x/2n 3 15
PT: divpwr2(-8,1) == -4 && divpwr2(16,2) ==
4

integer negative(x) Tnh gi tr ca x khng dng du 2 5


PT: negative (0) == 0 && negative (9) == -9
&& negative (-5) == 5

boolean Tr v True nu x > 0 3 8


isPositive(x) PT: isPositive(10) && !isPositive(-5) &&
!isPositive(0)

2.3 Advanced Bit Manipulator

Tn hm Yu cu thc thi im Max Ops

integer ilog2(x) Tnh gi tr ca Log2(x) 6 90


PT: ilog2(1024) == 10

III. YU CU 2 - THC HNH GII CC BI TON V BIT NH PHN


hiu r cc cu hi trn, chng ta vit thm mt hm trung gian tn l PrintBits xem
r hn gi tr ca chng trong tng giai on nh sau:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
void PrintBits(unsigned int x) {

int i;

for(i=8*sizeof(x)-1; i>=0; i--) {

(x & (1 << i)) ? putchar('1') : putchar('0');

printf("\n");

}
By gi chng ta cng nhau gii bi mu u tin:
2.1.1 boolean bitAnd(x,y)
Thc thi x & y ch dng ton th | v ~ v M
axOptions l 8(ti a s dng 8 ton t)
Ta p dng nh lut De Morgan nh sau: x&y = (~(~x|~y))
Vy code chng ta vit nh sau:
bool bitAnd(int x, int y)
{
bool result;
// theo dinh ly De Morgan ta co: x&y = (~(~(x&y))) mat khac (~(x&y))= (~x|~y). suy ra: x & y = ~(~x|~y)

result = (~(~x|~y));
return result;
}
y l php logic nn kt qu tr v l kiu Bool(True/False), hiu r hn cc bit so
snh vi nhau nh th no, gi tr ra sao ta dng hm PrintBits:

bool bitAnd(int x, int y)


{
bool result;
PrintBits(x);
PrintBits(y);

PrintBits(~x);
PrintBits(~y);
PrintBits(~x|~y);
PrintBits(~(~x|~y));

// theo dinh ly De Morgan ta co: x&y = (~(~(x&y))) mat khac (~(x&y))= (~x|~y). suy ra: x & y = ~(~x|~y)

result = (~(~x|~y));
return result;
}
Quan st mn hnh kt qu cho tng giai on hiu r hn, lung bits d liu thay i
nh th no. Sinh vin tip tc gii cc bi tp cn li.

You might also like