Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: [BT]Đổi chỗ 4 bit đầu và 4 bit cuối

  1. #1
    Ngày gia nhập
    07 2007
    Bài viết
    10

    Mặc định [BT]Đổi chỗ 4 bit đầu và 4 bit cuối

    Dương có người bạn phỏng vấn trong gameloft trong đó có câu hỏi.
    Chỉ dùng vòng lập While và 1 biến a-- đổi chổ 4 bit sau và 4 bit đầu của 1 byte bộ nhớ.
    Dương Ko rành về giải thuật nên làm hoài Ko xong. Các bạn ai biết làm ơn chỉ dùm.

  2. #2
    Ngày gia nhập
    05 2007
    Nơi ở
    HCMC
    Bài viết
    60

    Bài của bạn khá thú vị ! sonhn có 2 cách giải như sau:
    - Cách 1: dùng vòng lặp while lặp lại 4 lần, mỗi lần thực hiện:
    + Kiểm tra xem bit thứ 8 của biến a có = 1 hay không
    + Nếu bằng 1 thì dịch biến a sang trái 1 bit, rồi OR với 1
    + Ngược lại, dịch biến a sang trái 1 bit, rồi OR với 0
    Code:
    while (lặp lại 4 lần)
    {
        if(a & 0x80)             //kiểm tra bit bên trái cùng (bit thứ 8) có bằng 1?
            a = a << 1 | 1;
        else
            a = a << 1 | 0;
    }
    - Cách 2: Sử dụng toán tử xoay bít của hợp ngữ --> xoay biến a sang trái 4 bit (thậm chí không cần dùng vòng lặp while!)
    Code:
    __asm rol a,4;    //xoay biến a sang trái 4 bit
    Ghi chú thêm: giá trị Hexa 0x80 --> đổi sang nhị phân = [1000 0000] (bít thứ 8 = 1, các bit còn lại = 0)
    Đã được chỉnh sửa lần cuối bởi sonhn : 01-08-2007 lúc 10:35 AM.

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Cả hay cách trên đều đổi 4 bit đầu về 4 bit cuối nhưng thứ tự bị đảo ngược lại.
    Nếu đề bài yêu cầu không được đảo thì em dùng cách sau:
    a= a << 4 + a >> 4;

    To phamduong: Em cũng xin nhắc luôn, đề bài anh đặt ra không rõ ràng. Em sẽ sửa lại cho phù hợp.

  4. #4
    Ngày gia nhập
    05 2007
    Nơi ở
    HCMC
    Bài viết
    60

    To hailoc12: không có sự khác nhau giữa cách của bạn và 2 cách của mình, càng không có chuyện "thứ tự bị đảo ngược lại" . Hơn nữa, hailoc12 sửa lại biểu thức như thế này mới đúng:
    Code:
    a= a << 4 | a >> 4;     //thay toán tử + thành | (OR)
    Có thể kiểm tra lại bằng đoạn code:

    Code:
    unsigned char a = 0x86;
    _asm rol a,4;
    printf("%x",a);   //in ra: 68

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Có bài này nhờ các bạn chỉ cho:

    Cho 2 số a,b;
    Không được khai thêm biến mới, hãy đổi chỗ giá trị của a và b.

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    Mặc định [BT]Đổi chỗ 4 bit đầu và 4 bit cuối

    a=a+b; //ban đầu cho a=5, b=3 đi sau khi gán a=8, b=3
    b=a-b; //b=8-3=5 , a=8
    a=a-b; //a=8-5=3 , b=5
    thế là đổi chỗ ngon lành
    Đã được chỉnh sửa lần cuối bởi tienlbhoc : 01-08-2007 lúc 02:35 PM.
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  7. #7
    Ngày gia nhập
    06 2007
    Bài viết
    40

    Mở rộng bài toán của Popo chút nhỉ:
    - Có 3 số a,b,c . Không dùng thêm biến phụ, làm thế nào để mỗi số bằng tổng của 2 số còn lại .

  8. #8
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Có 3 số a,b,c . Không dùng thêm biến phụ, làm thế nào để mỗi số bằng tổng của 2 số còn lại
    a = a+b+c;
    b = a-b;
    c = a-c;
    a = (a-b) + (a-c);
    Thế này đúng chưa nhẩy )

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn