อัลกอริทึม C/C++

การจัดการ Bit

Bit mask รวม boolean option หลายค่าใน unsigned integer

การจัดการ Bit คืออะไร?

Bit mask รวม boolean option หลายค่าใน unsigned integer

Set, clear, toggle และ test flag

ประเด็นสำคัญ

  • ทดสอบ input ว่าง หนึ่งสมาชิก ซ้ำ และเรียงแล้ว
  • แยก correctness จาก optimization
  • ใช้ standard library ใน production เมื่อเหมาะสม

ตัวอย่างโค้ด C และ C++

C
รันโค้ด →
main.c
#include <stdio.h>

int main(void) {
    unsigned flags = 0;
    flags |= 1u << 1;
    flags |= 1u << 3;
    flags ^= 1u << 1;
    printf("flags=%u bit3=%u\n", flags, (flags >> 3) & 1u);
}
ผลลัพธ์ที่คาดหวัง
flags=8 bit3=1
C++
รันโค้ด →
main.cpp
#include <bitset>
#include <iostream>

int main() {
    std::bitset<4> flags;
    flags.set(1);
    flags.set(3);
    flags.flip(1);
    std::cout << "flags=" << flags
              << " bit3=" << flags.test(3) << '\n';
}
ผลลัพธ์ที่คาดหวัง
flags=1000 bit3=1

เปรียบเทียบ C และ C++

ใช้ unsigned เพื่อ shift ที่คาดเดาได้ C ใช้ mask ส่วน C++ bitset มี operation ชัดเจนและ output binary

C

Loop, pointer, length และ buffer เขียนอย่างชัดเจน

C++

Iterator และ algorithm แยก operation จาก storage

แบบฝึกหัด

รันทั้งสองเวอร์ชันแล้วแก้ไขเพื่อสังเกตความแตกต่างของภาษา

  • ไล่ตามทุก comparison
  • ทดสอบ duplicate และ extreme value
  • Benchmark กับ standard library