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

Đề tài: Dùng toán tử bit để đổi giá trị 2 biến

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    39

    Mặc định Dùng toán tử bit để đổi giá trị 2 biến

    hôm đọc một bài thấy bác langman có dùng cái này để đổi giá trị của 2 biến rất hay
    PHP Code:
    a^=b^=a^=b
    mình tìm lại trên diễn đàn mà không thấy đâu cả. Theo mình biết thì a^=b <=> a = a^b. đây là phép toán XOR . Bác nào giải thích hộ mình với .

    mình hiểu thế này không biết đúng không .
    ví dụ a = 2(a = 10 - nhi phan), b = 3 (b = 11 - nhi phan);
    a^=b^=a^=b
    thực hiện từ phải sang trái a^= b <=> a = a^b = 01 = 1;
    b^=a^=b <=> b = b^(a^=b) = 11^01 = 10 = 2;
    a^=b^=a^=b <=> a = a^(b^=a^=b) = 01^10 = 11 = 3;

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi xOkyox Xem bài viết
    hôm đọc một bài thấy bác langman có dùng cái này để đổi giá trị của 2 biến rất hay
    PHP Code:
    a^=b^=a^=b
    mình tìm lại trên diễn đàn mà không thấy đâu cả. Theo mình biết thì a^=b <=> a = a^b. đây là phép toán XOR . Bác nào giải thích hộ mình với .

    mình hiểu thế này không biết đúng không .
    ví dụ a = 2(a = 10 - nhi phan), b = 3 (b = 11 - nhi phan);
    a^=b^=a^=b
    thực hiện từ phải sang trái a^= b <=> a = a^b = 01 = 1;
    b^=a^=b <=> b = b^(a^=b) = 11^01 = 10 = 2;
    a^=b^=a^=b <=> a = a^(b^=a^=b) = 01^10 = 11 = 3;


    toán tử bit thao tác trên từng bit tương ứng, (bit thứ i của a sẽ được thực hiện tương ứng với bit thứ i của b)

    vì vậy trong th này để chứng minh ta chỉ cần chứng minh trên 1 bit thui
    đơn giản nhất là ta lập bảng chân lý là thấy ngay


    Mở rộng linh tinh thêm về toán tử trên bit
    + a&1 để kiểm tra tính chẵn lẻ của a,
    hoặc đọc bit cuối của a trong bài toán đổi sang nhị phân
    ( mở rộng thêm là ta dùng dùng a>=0 để đọc bít đầu của a)

    + dùng toán tử | có thể giúp ta thay đổi 1 bit của 1 số nào đó
    toán tử này được áp dụng rất nhiều trong các kĩ thuật cờ hiệu

    .........
    hì hì, tạm thời ko nhớ hết
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  3. #3
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bạn ghi ra thành 3 dòng sẽ hiểu, cái này IT vay mượn từ Maths, để ý là C/C++ evaluate từ phải qua trái.
    Code:
    1. a ^= b ^= a ^= b;  
    -> a = a ^ b;
    2. a ^= b^ =a ^=b ;
    -> b = b ^ a;
    3. a ^= b ^= a ^= b;
    -> a = a ^ b;
    Ghi lại :
    C++ Code:
    1. 1. a = a ^ b;
    2. 2. b = b ^ a;
    3. 3. a = a ^ b;
    Từ (1) và (2)
    -> b = b ^ a= b ^ ( a ^ b ) = ( b ^ b ) ^ a = 0 ^ b = a
    Từ (3)
    -> a = a ^ b = ( a ^ b ) ^ a = ( a ^ a ) ^ b = 0 ^ b = b

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    a^=b^=a^=b;


    đầu tiên
    a^=b

    tiếp theo với a thay đổi đó
    b^=a

    tiếp theo với a, b thay đổi đó
    a^=b


    Đã được chỉnh sửa lần cuối bởi langman : 08-01-2013 lúc 09:36 AM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    39

    Các bác chu đáo quá. Mình hiểu rồi. cảm ơn nhiều

Các đề tài tương tự

  1. Đổi giá trị 2 biến không dùng biến trung gian
    Gửi bởi hieubm trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 05-11-2014, 06:16 PM
  2. Cách dùng biến khi người dùng mở 1 trang trên 2 tab khác nhau
    Gửi bởi tuanngocpt trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 1
    Bài viết cuối: 24-08-2013, 08:28 AM
  3. Tại sao dùng const trong trường hợp dùng biến tham chiếu
    Gửi bởi dinhdoong trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 13
    Bài viết cuối: 04-02-2012, 10:45 PM
  4. Khi nào thì dùng biến con trỏ?
    Gửi bởi chuong01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 11-04-2009, 10:43 PM
  5. Dùng biến để biết hàng thứ mấy trong mảng
    Gửi bởi KFC trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 21-05-2008, 05:31 PM

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