เวลา/ตัวเลข

การดำเนินการระดับบิต

AND/OR/XOR/NAND/NOR/XNOR/NOT และการเลื่อนบิตบนจำนวนเต็มที่มีความกว้างที่กำหนด (8/16/32/64 บิต) ในระบบเลขฐานใดก็ได้

Bitwise operations work directly on a number's individual bits rather than its value as a whole — the basis for permission flags, network protocols, and low-level optimization.

How to use it

Common uses

Things to keep in mind

The result of NOT and shifts depends on the chosen bit width — the same number gives a different result at 8-bit versus 32-bit width because of the different number of bits involved.

XOR is often used to toggle a flag — applying XOR twice with the same value returns the original.

บทความเกี่ยวกับเครื่องมือนี้: Bitwise operation: AND, OR และ XOR ทำงานอย่างไรในระดับบิต

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

AND, OR, XOR, NAND, NOR, XNOR และ NOT ต่างกันอย่างไร?

AND ให้ค่า 1 เมื่อทั้งสองบิตเป็น 1 เท่านั้น OR ให้ 1 เมื่ออย่างน้อยหนึ่งบิตเป็น 1 และ XOR ให้ 1 เมื่อบิตต่างกัน NAND/NOR/XNOR คือการปฏิเสธของสิ่งเหล่านั้น ส่วน NOT จะกลับค่าทุกบิตของตัวถูกดำเนินการเดียว

ความกว้างบิตและเครื่องหมายของตัวเลขถูกจัดการอย่างไร?

เลือกความกว้าง 8/16/32/64 บิต — การดำเนินการและการเลื่อนบิตจะเกิดขึ้นภายในช่วงนั้น ตัวเลขติดลบแสดงด้วยส่วนเติมเต็มสอง ดังนั้นผลลัพธ์ของ NOT หรือการเลื่อนบิตอาจดูไม่คาดคิดหากคุณคุ้นเคยกับสัญกรณ์ฐานสิบ

การเลื่อนซ้ายกับการเลื่อนขวาต่างกันอย่างไร?

การเลื่อนซ้าย (<<) เพิ่มศูนย์ทางขวา ซึ่งเท่ากับการคูณด้วย 2 ยกกำลังจำนวนที่เลื่อน การเลื่อนขวาอาจเป็นแบบตรรกะ (เพิ่มศูนย์ทางซ้าย) หรือแบบเลขคณิต (รักษาบิตเครื่องหมาย) — ประเภทขึ้นอยู่กับโหมดที่เลือก

ทำไมนิพจน์อย่าง "if (a & b == c)" จึงมักไม่ทำงานตามที่คาดไว้?

ในภาษาส่วนใหญ่ operator เปรียบเทียบ == มีลำดับความสำคัญสูงกว่า bitwise operator & ดังนั้นนิพจน์จะถูกประเมินเป็น "a & (b == c)" ไม่ใช่อย่างที่ผู้เขียนตั้งใจไว้ตามปกติ เพื่อหลีกเลี่ยงกับดักนี้ ให้ใส่วงเล็บอย่างชัดเจนรอบ bitwise operation เสมอ

ทำไมจึงใช้ bitwise flag แทนตัวแปร boolean แยกกัน?

ชุดแฟล็กที่รวมไว้ในตัวเลขเดียวจะจัดเก็บและส่งได้กระชับกว่า (เช่น ในโปรโตคอลเครือข่ายหรือรูปแบบไฟล์) และการตรวจสอบหรือเปลี่ยนแฟล็กเฉพาะด้วย AND/OR/XOR เป็นการดำเนินการที่รวดเร็วเพียงครั้งเดียว

บทความ: เวลา/ตัวเลข

Unix time: เหตุใดคอมพิวเตอร์จึงนับเวลาตั้งแต่ปี 1970

เหตุใดวันที่ 1 มกราคม 1970 จึงกลายเป็นจุดอ้างอิงเวลาสำหรับระบบคอมพิวเตอร์ส่วนใหญ่

Cron expression: วิธีถอดรหัสตารางเวลาทำงาน

วิธีถอดรหัส expression อย่าง */15 * * * * และรู้แน่ชัดว่างานจะรันเมื่อไหร่

ระบบเลข: เหตุใดจึงมีระบบเลขฐานสอง ฐานแปด และฐานสิบหก

เหตุใดสี #FF5733 ใน CSS จึงเขียนด้วยเลขฐานสิบหกแทนที่จะเป็นฐานสิบ

ผลต่างวันที่: เหตุใดการนับวันจึงซับซ้อนกว่าที่คิด

เหตุใดการลบวันที่แบบไร้เดียงสาจึงอาจให้ผลลัพธ์ผิดพลาดเพราะปีอธิกสุรทิน

การคำนวณอายุ: เหตุใดจึงไม่ใช่แค่การลบปีธรรมดา

เหตุใดการลบปีเกิดแบบง่าย ๆ จึงอาจให้อายุมากกว่าความจริงหนึ่งปี

เขตเวลา: เหตุใด UTC จึงไม่ใช่สิ่งเดียวกับ GMT

เหตุใด UTC จึงไม่เคยเปลี่ยนแปลงสองครั้งต่อปี ในขณะที่เวลาลอนดอน (GMT/BST) เปลี่ยนแปลง

เครื่องคำนวณระยะเวลา: วิธีบวกชั่วโมง นาที และวินาทีอย่างถูกต้อง

เหตุใดเมื่อบวกนาทีและวินาทีจึงต้อง "ทด" เศษไปยังหลักถัดไป เหมือนกับการบวกเลขฐานสิบ

ISO 8601 Duration: วิธีเขียนระยะเวลาในรูปแบบมาตรฐาน

เหตุใด PT1H30M จึงหมายถึง "1 ชั่วโมง 30 นาที" ไม่ใช่ "1 นาที 30 ชั่วโมง"

หมายเลขสัปดาห์: เหตุใดแต่ละประเทศจึงนับสัปดาห์ต่างกัน

เหตุใดวันที่ 1 มกราคมจึงอยู่ในสัปดาห์ที่ 52 หรือ 53 ของปีก่อนหน้าบางครั้งตามมาตรฐาน ISO 8601

เลขโรมัน: ระบบที่ไม่มีเลขศูนย์และไม่มีหลักค่าประจำตำแหน่งทำงานอย่างไร

เหตุใด IV จึงหมายถึง 4 ไม่ใช่ 6 และกฎการลบทำงานอย่างไรในเลขโรมัน

IEEE 754: เหตุใด 0.1 + 0.2 จึงไม่เท่ากับ 0.3 ในโค้ด

เหตุใดเกือบทุกภาษาโปรแกรมจึงแสดงผล 0.1 + 0.2 เป็น 0.30000000000000004

ตัวเลขเป็นคำอ่าน: เหตุใดต้องแปลงตัวเลขเป็นคำ

เหตุใดเอกสารธนาคารจึงเขียนจำนวนเงินทั้งเป็นตัวเลขและคำอ่านพร้อมกัน