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);
}
Hàm bit để lấy bit thứ k của 1 số:
Hàm cộng