Thông báo

Collapse
No announcement yet.

cho em hỏi thuật toán đảo bit trong 1 byte

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • cho em hỏi thuật toán đảo bit trong 1 byte

    em đang vướng phải vấn đề thế này. yêu cầu là đảo thứ tự bit trong 1 byte.bit 7 thành bit 0, bit 6 thành bit 2........em nghĩ mãi ko ra thuật toán thế nào.các bác giúp em với.có code ex thì càng hay.em viết bằng C nha
    ex: byte gốc: 10011010
    byte sau khi đảo: 01011001

  • #2
    Mình viết bằng basic, ko biết có giúp gì đc bạn ko, mình có hàm toggle là hàm đảo 1 bit

    Code:
     X =  10010111
      For I = 0   to 7
                  Toggle X.i
      Next
     ' X = 01101000

    0988467839

    Comment


    • #3
      Àh quên là bạn đảo bit từ dưới lên, bạn làm như vầy thử

      Code:
       X = 10011010
        m=7
        For I=0 to 7
              Y.m = X.i
              m = m-1
        Next
        X=Y
       ' X= 01011001

      0988467839

      Comment


      • #4
        Nếu dùng KeilC thì làm như sau:

        //Khai báo 1 biến trung gian:

        unsigned char bdata temp1;
        sbit bit7 = temp1 ^ 7;
        sbit bit6 = temp1 ^ 6;
        sbit bit5 = temp1 ^ 5;
        sbit bit4 = temp1 ^ 4;
        sbit bit3 = temp1 ^ 3;
        sbit bit2 = temp1 ^ 2;
        sbit bit1 = temp1 ^ 1;
        sbit bit0 = temp1 ^ 0;



        Lập 1 hàm đảo bít:

        unsigned char dao_bit(unsigned char rev)
        {
        bit7 = rev & 0x01;
        bit6 = rev & 0x02;
        bit5 = rev & 0x04;
        bit4 = rev & 0x08;
        bit3 = rev & 0x10;
        bit2 = rev & 0x20;
        bit1 = rev & 0x40;
        bit0 = rev & 0x80;
        rev = temp1;
        return(rev);
        }

        .
        .
        .
        .

        void main()
        {
        ......................
        }

        Ví dụ:

        //byte gốc: 10011010

        byte_sau_khi_dao = dao_bit(byte_goc);

        //byte sau khi đảo: 01011001

        Comment


        • #5
          Làm gì mà phức tạp vậy nhỉ??Muốn đảo bít thì ta chỉ việc cộng ko nhớ byte đó với 1 byte 11111111 là đc mà.????????


          Add: 97 Quán Nam - Lê Chân - Hải Phòng.
          Tel: 031 518648 Phone: 0904 283 505

          Comment


          • #6
            cộng như thế nào hả bạn, có thể viết cho minh code c được ko

            Comment


            • #7
              nếu công vs 0xff thì trong C làm sao mà thực hiện không nhớ bạn!
              theo mình:
              Char *byte_truoc_khi_doi, *byte_Sau_khi_đổi;
              for(i=0,j=8;i<8,j>=0,;i++,j--)
              *(byte_sau_khi_đổi+i)=*(byte_trước_khi_đổi+j);
              Last edited by dinhnam123; 24-09-2012, 20:30.
              |

              Comment


              • #8
                Nguyên văn bởi hoangdai Xem bài viết
                Làm gì mà phức tạp vậy nhỉ??Muốn đảo bít thì ta chỉ việc cộng ko nhớ byte đó với 1 byte 11111111 là đc mà.????????
                Bác bị nhầm rồi, đảo vị trí bit chứ không phải đảo giá trị bit. Cộng không nhớ với 0xff là hàm xor thôi. Nhưng không làm được trong trường hợp này.
                Có thể dùng cách quay bit và gán hoặc che bit như ở trên đều được.
                EDA Engineer - Design on Demand
                Email:
                Web:

                Comment


                • #9
                  Cái này chắc chắn là phải đảo có nhớ
                  Vì sao, nó quay bit chứ không phải dịch bit

                  Comment


                  • #10
                    em cung dang gap van de nay, xin duoc jup do
                    hoangduc2304

                    01884653780

                    Comment


                    • #11
                      em đã tìm ra cách dịch 1 bit rồi. chia sẽ hi vọng sẽ giúp được ( mới tham khảo trên mạng và test xong)
                      để dịch phải 1 số nào đó (vd:23) sang phải 1 bit ta làm như sau : 25>>1;
                      sang trái thì ngược lại : 23<<1
                      chúc vui
                      hoangduc2304

                      01884653780

                      Comment


                      • #12
                        đảo bit thật đơn giản

                        x++;
                        y=0;
                        for (i=0;i<7;i++)
                        if(bit_test(x,7-i))bit_set(y,i);
                        Nguyên văn bởi datinhlakho2 Xem bài viết
                        em đã tìm ra cách dịch 1 bit rồi. chia sẽ hi vọng sẽ giúp được ( mới tham khảo trên mạng và test xong)
                        để dịch phải 1 số nào đó (vd:23) sang phải 1 bit ta làm như sau : 25>>1;
                        sang trái thì ngược lại : 23<<1
                        chúc vui

                        Comment

                        Về tác giả

                        Collapse

                        hoasua_2005 Tìm hiểu thêm về hoasua_2005

                        Bài viết mới nhất

                        Collapse

                        Đang tải...
                        X