0.2 Why char Exists
ผมมี 8 bits:
01000001— นี่คือตัวเลข 65? หรือตัวอักษร A? หรืออย่างอื่น?
คำตอบ: ขึ้นอยู่กับ “ข้อตกลง”
Section titled “คำตอบ: ขึ้นอยู่กับ “ข้อตกลง””ข้อตกลงเหล่านั้นเรียกว่า encoding
| Encoding | 01000001 หมายถึง |
|---|---|
| ASCII | ตัวอักษร A |
| Integer | ตัวเลข 65 |
char คืออะไร?
Section titled “char คืออะไร?”char คือข้อตกลงที่ว่า: “bits เหล่านี้แทนสัญลักษณ์ 1 ตัว”
- ASCII ครอบคลุมภาษาอังกฤษ: A–Z, 0–9, เครื่องหมายพื้นฐาน → ใช้ 1 byte ต่อ char
- Unicode (UTF-8) ครอบคลุมทุกอย่าง — อังกฤษ, ไทย (ก–ฮ), emoji (🎉), จีน, อารบิก → ใช้ 1–4 bytes ต่อ char
นี่คือที่กำเนิดของ char — ใน C มันเป็นแค่ integer ขนาด 8 bits
#include <stdio.h>int main() { char c = 65; printf("%d\n", c); // 65 — ดูเป็นตัวเลข printf("%c\n", c); // A — ดูเป็นตัวอักษร printf("%zu\n", sizeof(char)); // 1 (byte) return 0;}ใน C, char คือ integer 8-bit ตรงตัว จะเห็น A หรือ 65 ขึ้นอยู่กับว่าคุณขอให้ print แบบไหน
นี่คือ origin story ของ char type — ทุกภาษาอื่นสืบทอดแนวคิดนี้มา
Sheets มีเครื่องมือ built-in ให้เห็น encoding ได้ชัดเจน:
| สูตร | ผลลัพธ์ | ความหมาย |
|---|---|---|
=CODE("A") | 65 | ASCII number ของ A |
=CHAR(65) | "A" | ย้อนกลับ — ตัวเลขเป็นตัวอักษร |
=UNICODE("ก") | 3585 | Unicode code point ของ ก |
=LEN("ก") | 1 | 1 character (ที่ตาเห็น) |
=LENB("ก") | 3 | 3 bytes (ที่เครื่องเก็บ) |
=LEN("🎉") | 2 | 2 “code units” |
=LENB("🎉") | 4 | 4 bytes ใน UTF-8 |
จุดสำคัญ: LEN นับสิ่งที่คนเห็น — LENB นับสิ่งที่คอมพิวเตอร์เก็บ มันต่างกันสำหรับทุกอย่างที่ไม่ใช่ภาษาอังกฤษพื้นฐาน
len("ก") # 1 — Python นับ characterslen("ก".encode("utf-8")) # 3 — 3 bytes บน disk
'A'.encode() # b'A' (1 byte)'🎉'.encode() # b'\xf0\x9f\x8e\x89' (4 bytes)Python เห็นตรงกับ Sheets — ทั้งคู่นับ “สิ่งที่ตาเห็น” เป็นค่า default
CREATE TABLE t (c CHAR(1));INSERT INTO t VALUES ('A');SELECT ASCII(c) FROM t; -- 65เลข 65 เหมือนกัน SQL สืบทอดแนวคิดนี้จาก C โดยตรง