30/09/2018, 20:38

Phép toán thao tác bit và cộng 2 số nguyên dạng nhị phân?

lúc mình học kiến trúc máy tính, cộng trừ nhân chia 2 số nguyên ở dạng nhị phân,
nó na ná như mình làm ở dạng thập phân
cộng: 1 +1 dư thì cộng lên bít trước
trừ : 0-1 thiếu thì mượn trước
chia và nhân như thập phân
khi đọc đề bài , mình code theo tư tưởng trên, dùng mảng hoặc stack hoặc linked list…v.v.
nhưng rất lằng nhằng, mình tìm hiểu thêm về phép toán trên bit, thì thấy 1 chương trình này
mình muốn hỏi,
tại sao khi học kiến trúc mt, sách lại dậy mt cộng như mình nói trên, hay đó chỉ là mô phỏng hoạt động + - * / của máy tính thực hiện
nhưng thực tế là nó cộng như đoạn code bên dưới
a - b <=> a+(-b)
a*b thì dùng <<
a/b thì dùng a-b,dùng a+b
mọi phép toán đều bắt đầu từ phép +
vấn đề là nó dùng thao tác bít để làm chứ không phải dùng mảng rồi đập đá trường kì như mình nói ban đâu

ý nghĩa của hàm bit, và hàm add hoạt động như thế nào => thuật toán cộng 2 số nguyên trong đoạn code dưới là gì? mình đã chạy ct bằng tay, biết là nó vẫn cộng như trong môn kiến trúc máy tính nêu, nhưng nó dùng bit operator chứ k phải thủ công = mảng >.< mình chưa có kinh nghiệm về bit operator mấy, vì ít khi sử dụng chúng
xin cảm ơn

cộng 2 số nguyên, dưới dạng nhị phân như sau

int bit(int a, int k){
int j=1;
if (a & (j<<k))
return(1);
return(0);
}

int Addition(int a, int b){
int du, d, s, j, c=0;
du=0;
for ( j=0; j<=15; j++){
d =( bit(a,j) + bit(b, j) +du)/2;
s = bit(a,j)+bit(b,j)+ du - 2*d;
c = c | (s <<j);
du = d;
}
return(c);
}
Gió viết 22:51 ngày 30/09/2018

Hàm bit để lấy bit thứ k của 1 số:

1<<k = 100...000 (k số 0)
phép & sẽ tính trên từng bit mà số 1<<k trước hay sau cũng toàn 0 nên không cần quan tâm. Chỉ quan tâm đúng bit thứ k
Nếu bít k= 1 phép & => kết quả=1<<k
Nếu bit k= 0 cho kết quả=0
Từ đó dùng if để lấy kết quả

Hàm cộng

thực sự người code đánh lừa người đọc vì dư không phải là dư, mà dư là phép cộng rồi `nhớ` 1 hay 0, còn s mới là phép dư
c=c|(s<<j) tương đương với c=c+(s<<j) vì số bít trước của c không quá j mà phép xor với 0 thì giữ lại kết quả
Bài liên quan
0