Hỏi về dùng số nhị phân

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • viet_bk
    Nhập môn đệ tử
    • Oct 2007
    • 5

    #1

    Hỏi về dùng số nhị phân

    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
    Trưởng lão PIC bang
    • Feb 2006
    • 3020

    #2
    Nguyên văn bởi viet_bk View Post
    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/m...cd-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,
    Biển học mênh mông, sức người có hạn.

    Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
    http://www.picvietnam.com/forum/showthread.php?t=1263

    Comment

    • viet_bk
      Nhập môn đệ tử
      • Oct 2007
      • 5

      #3
      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á

      Comment

      • namqn
        Trưởng lão PIC bang
        • Feb 2006
        • 3020

        #4
        Nguyên văn bởi viet_bk View Post
        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):


        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,
        Biển học mênh mông, sức người có hạn.

        Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
        http://www.picvietnam.com/forum/showthread.php?t=1263

        Comment

        • lequocbao
          Đệ tử 6 túi
          • Oct 2008
          • 137

          #5
          vậy còn số âm thì sao anh Namqn?
          A&A

          Comment

          • namqn
            Trưởng lão PIC bang
            • Feb 2006
            • 3020

            #6
            Nguyên văn bởi lequocbao View Post
            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,
            Biển học mênh mông, sức người có hạn.

            Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
            http://www.picvietnam.com/forum/showthread.php?t=1263

            Comment

            • lequocbao
              Đệ tử 6 túi
              • Oct 2008
              • 137

              #7
              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.
              A&A

              Comment

              • dvkkt
                Đệ tử 3 túi
                • Oct 2007
                • 55

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

                Comment

                • lequocbao
                  Đệ tử 6 túi
                  • Oct 2008
                  • 137

                  #9
                  tối nay thử liền!
                  A&A

                  Comment

                  Working...