Input 3 số nguyên ko âm x , b,n b có giá trị 0 hoặc 1 0<=n<=31
Out put dòng 1 số x đã đc biến đổi dưới dạng hex
Dòng 2 bit thứ n của x nhận giá trị b viết lại x dưới dạng hex . Quy ước bit cao ở bên trái , chỉ số bit tính từ 0
Vd input 15 2 0
Out put f
b
Cho em xin gợi ý về cái thay đổi bit với ạ
Biến đổi bit trong C
Đây là thao tác set bit/clear bit đơn giản cậu ạ
Với b=1, đây là bài toán set bit. Cậu chỉ cần tạo mặt nạ bit để set bit ở vị trí nhất định, rồi tính OR giữa số gốc và mặt nạ bit.
Ví dụ: với x = 1011 (11 hay 0xb), b = 1, n = 2, cậu tạo ra mặt nạ 0100, rồi tính 1011 OR 0100 = 1111 (15 hay 0xf).
Tóm lại, cậu cần tính x | 1 << n
Với b=0, đây là bài toán clear bit. Cậu cần tạo mặt nạ bit để clear bit ở vị trí nhất định, rồi AND mặt nạ bit với số gốc.
Ví dụ: với x = 1111 (15 hay 0xf), b = 0, n = 2, cậu tạo ra mặt nạ 1011, rồi tính 1111 AND 1011 = 1011 (11 hay 0xb).
Tóm lại, cậu cần tính x & !(1 << n)
Hope it helps!
Dạ em cảm ơn anh đã chỉ . cho em hỏi cái !(1<<n) thì ! có nghĩa gì ạ…em mới học nên chưa hiểu hết đc ạ
Đó là “not operator” cậu ạ
Cậu cần lấy phủ định sau khi dịch bit (từ 0100 => 1011).
Ở đây dùng sai rồi nha. Cần dùng phép đảo bit ~
chứ không phải phép NOT !
cụ thể là x & ~(1<<n)
em cảm ợn anh ạ
vâng e cảm ơn