PDA

View Full Version : Hỏi về dùng số nhị phân


viet_bk
06-01-2009, 03:35 PM
em thấy rất nhiều thuật toán về biến đổi các số nhị phân sang BCD nhưng ko thấy thuật toán BCD sang nhị phân bao giờ. bác nào có thể giới thiệu cho em quyển sách viết về các phép toán số nhị phân. tiếng việt hay tiếng anh cang tốt. em xin cảm ơn

namqn
06-01-2009, 05:47 PM
em thấy rất nhiều thuật toán về biến đổi các số nhị phân sang BCD nhưng ko thấy thuật toán BCD sang nhị phân bao giờ. bác nào có thể giới thiệu cho em quyển sách viết về các phép toán số nhị phân. tiếng việt hay tiếng anh cang tốt. em xin cảm ơn
Về chuyển đổi BCD sang nhị phân (nó quá trực quan để phải viết thành thuật toán):
http://www.electro-tech-online.com/micro-controllers/41808-convert-bcd-binary.html

Các phép toán số học trên số nhị phân cũng chẳng khác gì trên số thập phân. Hệ nhị phân chỉ là một cách biểu diễn con số ở format khác, nhằm thuận lợi hơn cho việc hiện thực trên máy tính số.

Bạn cần tìm hiểu về phép toán nào thì cứ liệt kê ra đây.

Thân,

viet_bk
07-01-2009, 10:42 AM
em không hiêu trực quan có nghĩa thế nào. nếu em dùng assembly thì làm thế nào. nếu như anh giới thiệu thì vẫn dùng phép nhân.lại phải dùng thêm một hàm nhân. nếu như chuyển từ nhị phân sang BCD thì chỉ cần dịch bít rồi khiểm tra xem có lớn hơn 9 hay không. nêu đúng thì công thêm 6. em muốn tìm một thuật toán dạng như vậy. nếu có anh giới thiệu cho em nhá

namqn
07-01-2009, 04:36 PM
em không hiêu trực quan có nghĩa thế nào. nếu em dùng assembly thì làm thế nào. nếu như anh giới thiệu thì vẫn dùng phép nhân.lại phải dùng thêm một hàm nhân. nếu như chuyển từ nhị phân sang BCD thì chỉ cần dịch bít rồi khiểm tra xem có lớn hơn 9 hay không. nêu đúng thì công thêm 6. em muốn tìm một thuật toán dạng như vậy. nếu có anh giới thiệu cho em nhá
Trong hệ nhị phân, phép nhân chính là kết hợp của phép dịch và phép cộng. Ví dụ, x*10 = x*8 + x*2 = (x<<3) + x(<<1).

Sau đây là thuật toán chuyển số BCD 5 chữ số thành số nhị phân 16-bit (áp dụng đúng nguyên tắc trên):
http://www.piclist.com/techref/microchip/math/radix/bu2b-5d16b-ph.htm

Bài viết trước đó của bạn chỉ yêu cầu về thuật toán, chứ không cho biết bạn đang viết code hợp ngữ.

Thân,

lequocbao
10-01-2009, 05:46 PM
vậy còn số âm thì sao anh Namqn?

namqn
10-01-2009, 06:14 PM
vậy còn số âm thì sao anh Namqn?
Nếu PIC có hỗ trợ các phép toán trên số có dấu thì chúng ta dùng các phép toán đó. Ngược lại, chúng ta xét dấu của hai toán hạng để xác định dấu của kết quả, rồi chuyển chúng về dạng không dấu, và dùng các thuật toán đã có cho số không dấu. Ví dụ, nhân hai số cùng dấu sẽ cho dấu +, và nhân hai số ngược dấu sẽ cho dấu -.

Thân,

lequocbao
14-01-2009, 10:05 AM
Nhưng cái quan trọng là làm sao để biết đó là số âm anh Namqn àh!chứ em dùng các câu lệnh như :
int8 x;
if(x<0)
giá trị của x sẽ được giảm từ từ trong vòng lặp hoặc từ nút nhấn giảm bên ngoài.
thì kết quả của lệnh if trên luôn là false anh àh!mặc dù mình biết là x đã được giảm nhỏ hơn 0 rồi.

dvkkt
14-01-2009, 10:57 AM
Bạn khai báo x là sô nguyên 8 bit không dấu, thì làm gì có chuyện giảm nhỏ hơn 0, lệnh if trên luôn false vì x không âm. Thử khai báo signed int8 xem.

lequocbao
14-01-2009, 02:54 PM
tối nay thử liền!