Thông báo

Collapse
No announcement yet.

Xin giúp về đảo bit :(

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

  • Xin giúp về đảo bit :(

    Dự định của mình trình bày thì rất dài nhưng khó khăn gặp phải xin tóm tắt thế này:
    mình có một biến(1byte) x mang một giá trị nào đấy ví dụ 00000000 bây giờ mình muốn x=y; với giá trị y là 00010000.(đảo bit tại bit thứ 4 trong byte)
    Vì có rất nhiều biến cần đảo bit tại một bit xác định của một byte nên không thể làm thủ công x=00010000;
    Bạn nào tốt giúp mình code này với
    Đảo một bit xác định trong một byte
    À quên code C cho keil (code ASM thì mình không biết) bạn nào không thích viết code thì có thể nêu hướng làm mình tự tìm hiểu cũng được

  • #2
    Nguyên văn bởi LeeShin456 Xem bài viết
    Dự định của mình trình bày thì rất dài nhưng khó khăn gặp phải xin tóm tắt thế này:
    mình có một biến(1byte) x mang một giá trị nào đấy ví dụ 00000000 bây giờ mình muốn x=y; với giá trị y là 00010000.(đảo bit tại bit thứ 4 trong byte)
    Vì có rất nhiều biến cần đảo bit tại một bit xác định của một byte nên không thể làm thủ công x=00010000;
    Bạn nào tốt giúp mình code này với
    Đảo một bit xác định trong một byte
    À quên code C cho keil (code ASM thì mình không biết) bạn nào không thích viết code thì có thể nêu hướng làm mình tự tìm hiểu cũng được
    Code:
    XOR    A   B
     0     0   0 
     0     1   1 
     1     0   1 
     1     1   0
    x = 0000.0000
    xor:0001.0000
    =>y=0001.0000
    xor tiếp với: 0001.0000 => 0000.0000
    nói cách khác: y=x^0x10
    Tóm lại: muốn bit nào đảo thì xor với 1, còn bit nào để nguyên thì xor với 0
    Chúc thành công!

    Comment


    • #3
      Nguyên văn bởi nhanh0112 Xem bài viết
      Code:
      XOR    A   B
       0     0   0 
       0     1   1 
       1     0   1 
       1     1   0
      x = 0000.0000
      xor:0001.0000
      =>y=0001.0000
      xor tiếp với: 0001.0000 => 0000.0000
      nói cách khác: y=x^0x10
      Tóm lại: muốn bit nào đảo thì xor với 1, còn bit nào để nguyên thì xor với 0
      Chúc thành công!
      Hi Leeshine456, nhanh0112
      Việc đảo bit mà dùng OR là không thật hợp lý, người ta dùng phép AND với bit "0" để gán bit tương ứng (bất chấp nó đang mang giá trị bao nhiêu) về giá trị "0". Còn người ta dùng phép OR với bit "1" để gán bit tương ứng về giá trị "1" (bất chấp nó đang là bao nhiêu).
      Vậy bạn muốn đảo bit nào, thì cần xác định giá trị "1" của bit đó (thập phân hoặc HEX), sau đó xem giá trị nó đang mang là "1" hay "0" mà chúng ta thực hiện phép AND hay OR ở trên
      Ví dụ, ta cần đảo X=0101 , đảo bit 3, tức là thành Y=0001.
      + tmp = X and 0100
      + nếu tmp>0 thì Y = X and 1011
      + còn lại, nếu tmp = 0 thì Y = X or 0100

      Xong rồi đấy bạn ạ, chạy trên giấy là ngon, nếu cần đảo bit tự động từ 0 đến bit 7, bạn chịu khó đầu tư thêm chút time nhé, chúc vui
      Last edited by thanh_chuoi; 19-04-2010, 01:39.

      Comment


      • #4
        Nguyên văn bởi LeeShin456 Xem bài viết
        Dự định của mình trình bày thì rất dài nhưng khó khăn gặp phải xin tóm tắt thế này:
        mình có một biến(1byte) x mang một giá trị nào đấy ví dụ 00000000 bây giờ mình muốn x=y; với giá trị y là 00010000.(đảo bit tại bit thứ 4 trong byte)
        Vì có rất nhiều biến cần đảo bit tại một bit xác định của một byte nên không thể làm thủ công x=00010000;
        Bạn nào tốt giúp mình code này với
        Đảo một bit xác định trong một byte
        À quên code C cho keil (code ASM thì mình không biết) bạn nào không thích viết code thì có thể nêu hướng làm mình tự tìm hiểu cũng được
        Nhân tiện đang rảnh, mình giúp luôn LeeShin456 nhé
        Bạn khai báo 1 mảng 8 phần tử {1,2,4,8,16,32,64,128} --> ứng với 8 bít mình muốn đổi từ bit 0 - bit 7
        Viết 1 chương trình con Invert (val, bit_position)
        Val chính là giá trị X trong ví dụ trên của mình
        So sánh X với giá trị trong mảng có bit cần đổi ở vị trí bit_position
        Rồi làm như mình đã nói ở trên
        .....

        Xong, OK?

        Comment


        • #5
          Cảm ơn các bạn nhé
          Mình cũng tự tìm ra được cách giống với nhanh0112
          y= x^16;( mình nêu ra cho các bạn khác cùng xem thui
          nếu muốn đảo bit thứ 4. Với các bit khác thì làm tương tự!
          Trong lúc học mình không để ý đếm xor lắm, hôm trước bí bách đành ngồi đọc lại từ đầu cái ebook mới phát hiện ra cái này!

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X