Biến đổi bit trong C

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 ạ

Đây là thao tác set bit/clear bit đơn giản cậu ạ :smile:
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!

5 Likes

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 ạ :smile:
Cậu cần lấy phủ định sau khi dịch bit (từ 0100 => 1011).

2 Likes

Ở đâ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)

5 Likes

em cảm ợn anh ạ :heart_eyes:

vâng e cảm ơn :grin:

Nice catch @nitro2 :smile:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?