0Pricing
Competitive Programming Academy · บทเรียน

ตั้งค่า ล้าง และสลับบิต

แก้ไขบิตเดียวด้วยมาสก์

ตั้งค่า ล้าง และสลับบิต เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน

แก้ไขทีละบิต

บางครั้งคุณจำเป็นต้องเปลี่ยนบิตเพียงหนึ่งบิตโดยไม่แตะต้องบิตอื่น เคล็ดลับคือการสร้างมาสก์ที่เจาะจงไปยังบิตที่ต้องการพอดี 🎯

สร้างมาสก์บิตเดียว

เลื่อน 1 ไปยังตำแหน่งที่ต้องการ แล้วคุณจะได้มาสก์ที่เปิดอยู่เพียงหนึ่งบิต ตำแหน่ง 0 คือบิตขวาสุด

mask = 1 << 3  # 0b1000, targets bit 3

ตั้งค่าบิตด้วย OR

หากต้องการเปิดบิต ให้ทำ OR ระหว่างตัวเลขกับมาสก์ OR จะบังคับให้ตำแหน่งนั้นเป็น 1 และปล่อยให้บิตอื่น ๆ ไม่เปลี่ยนแปลง เราเรียกการดำเนินการนี้ว่าการตั้งค่าบิต

n = 0b0001
n |= (1 << 2)  # 0b0101

การตั้งค่าบิตทำซ้ำได้อย่างปลอดภัย

หากบิตเป็น 1 อยู่แล้ว การตั้งค่าอีกครั้งจะไม่เปลี่ยนแปลงอะไร การใช้ OR กับมาสก์จึงทำซ้ำได้อย่างปลอดภัย ทำให้เชื่อถือได้เมื่อใช้ภายในลูป 👍

มาสก์กลับด้าน

หากต้องการล้างบิต คุณต้องใช้มาสก์ที่ตำแหน่งนั้นเป็น OFF และตำแหน่งอื่นทั้งหมดเป็น ON ตัวดำเนินการ NOT (~) จะกลับค่าทุกบิตของมาสก์อย่างง่ายของคุณ

clear = ~(1 << 2)  # ...11111011

ล้างบิตด้วย AND

ใช้ AND กับตัวเลขและมาสก์กลับด้าน เพื่อบังคับให้บิตนั้นเป็น 0 โดยคงบิตที่เหลือไว้ นี่คือวิธี ล้างบิตเพียงหนึ่งบิต

n = 0b0111
n &= ~(1 << 1)  # 0b0101

สลับบิตด้วย XOR

การใช้ XOR กับมาสก์ที่มีบิตเดียวจะกลับค่าที่ตำแหน่งนั้น: 0 กลายเป็น 1 และ 1 กลายเป็น 0 การ สลับนี้เป็นคำสั่งบรรทัดเดียวที่กระชับที่สุดในสามวิธี

n = 0b0101
n ^= (1 << 0)  # 0b0100

ตรวจสอบว่าบิตเป็น ON หรือไม่

ใช้ AND กับตัวเลขและมาสก์ที่มีบิตเดียว หากผลลัพธ์ไม่เป็นศูนย์ แสดงว่า บิตนั้นถูกตั้งค่าไว้ หากเป็นศูนย์ บิตนั้นจะเป็น OFF

n = 0b0100
on = (n & (1 << 2)) != 0  # True

อ่านบิตเป็น 0 หรือ 1

เลื่อนตัวเลขไปทางขวาเพื่อนำบิตเป้าหมายมาไว้ด้านล่างสุด จากนั้นใช้ AND กับ 1 ผลลัพธ์ที่ได้จะเป็น ค่าบิตนั้นโดยตรง คือ 0 หรือ 1

n = 0b1010
bit = (n >> 1) & 1  # 1

เหตุใดการแก้ไขบิตจึงสำคัญ

การตั้งค่า การล้าง และการสลับบิต ช่วยให้คุณเก็บแฟล็กสถานะ ON หรือ OFF จำนวนมากไว้ในจำนวนเต็มเพียงตัวเดียว นี่คือหัวใจของสถานะด้วย มาสก์บิตแบบกะทัดรัดในการแข่งขัน

ระวังความคลาดเคลื่อนทีละหนึ่ง

ตำแหน่งบิตเริ่มต้นที่ 0 ดังนั้นบิต k จึงอยู่ที่ค่า 1 ที่เลื่อนไปทางซ้าย k ตำแหน่ง การสับสนเรื่องดัชนีเป็นข้อผิดพลาดที่ผู้เริ่มต้นมักพบมากที่สุดในหัวข้อนี้

ตรวจสอบอย่างรวดเร็ว

เลือกการดำเนินการที่ถูกต้องสำหรับการล้างบิต

ทบทวน: ตั้งค่า ล้าง และสลับ

OR ใช้ตั้งค่าบิต, AND กับ NOT ใช้ล้างบิต และ XOR ใช้สลับบิตเพียงหนึ่งบิต เมื่อเข้าใจมาสก์ทั้งสามแบบนี้แล้ว คุณจะควบคุมบิตใดก็ได้ตามต้องการ 🎉

คำถามที่พบบ่อย

บทเรียน “ตั้งค่า ล้าง และสลับบิต” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตั้งค่า ล้าง และสลับบิต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Competitive Programming Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตั้งค่า ล้าง และสลับบิต”

แก้ไขบิตเดียวด้วยมาสก์ คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Competitive Programming Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Competitive Programming Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ตั้งค่า ล้าง และสลับบิต” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม

ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. AND, OR, XOR และการเลื่อนบิต
  2. ตั้งค่า ล้าง และสลับบิต
  3. นับบิตและบิตที่ถูกตั้งค่าต่ำสุด
  4. บิตมาสก์ในฐานะเซตขนาดเล็ก
← กลับไปที่ Competitive Programming Academy