Lab: Trace One Byte
คุณจะตามรอย character ตัวเดียว ขณะมันเดินทางผ่าน Google Sheets, C, Python, และ SQL
เวลาที่ใช้: ~25 นาที
คำสั่ง
Section titled “คำสั่ง”-
Google Sheets
ในเซลล์ A1 พิมพ์ตัวอักษร
Aแล้วทำ:=CODE(A1)→ ได้เลขอะไร?=DEC2BIN(CODE(A1))→ ได้ binary pattern อะไร?=LEN(A1)vs=LENB(A1)— เท่ากันไหม?
ตอนนี้ลองพิมพ์
กในเซลล์ A2 แล้วทำสูตรเดิม — อะไรเปลี่ยน? -
C (online compiler — onlinegdb.com, replit.com)
#include <stdio.h>int main() {char a = 'A';printf("as number: %d\n", a);printf("as char: %c\n", a);printf("size: %zu byte\n", sizeof(a));return 0;}รันแล้วดู: ตัวเลขตรงกับที่ Sheets ให้มาไหม?
-
Python (notebook หรือ Pyodide)
ord('A') # ?bin(ord('A')) # ?len('A'.encode()) # ?len('ก'.encode()) # ?ผลลัพธ์เหมือน Sheets ไหม?
-
SQL (sandbox ใดก็ได้)
CREATE TABLE t (c CHAR(5));INSERT INTO t VALUES ('HI');SELECT c, LENGTH(c) FROM t;ทำไม
LENGTHได้ 5 ไม่ใช่ 2? -
Reflect
เขียนประโยค 1 ประโยค อธิบายสิ่งที่คุณรู้ตอนนี้ที่ไม่รู้เมื่อชั่วโมงก่อน
Bonus: เชื่อมโยงผลลัพธ์
sizeofของ C กับพฤติกรรม padding ของCHAR(n)ใน SQL
ดูเฉลย
Google Sheets:
=CODE("A")→65=DEC2BIN(CODE("A"))→1000001=LEN("A")→1,=LENB("A")→1(เท่ากันเพราะ A เป็น ASCII 1 byte)=LEN("ก")→1,=LENB("ก")→3(ต่างกัน! ก ใช้ 3 bytes ใน UTF-8)
C:
as number: 65— ตรงกับ Sheets!as char: Asize: 1 byte
Python:
ord('A')→65(ตรงกัน!)bin(ord('A'))→'0b1000001'len('A'.encode())→1len('ก'.encode())→3(ตรงกับ SheetsLENB)
SQL:
LENGTHได้ 5 เพราะCHAR(5)เติม trailing spaces ให้'HI'กลายเป็น'HI '— เหมือน C ที่char fixed[5]จองพื้นที่ 5 bytes เสมอ
Bonus: sizeof(char) = 1 byte ใน C → CHAR(5) = 5 bytes เสมอ ไม่ว่าจะเก็บข้อความสั้นแค่ไหน — ที่เหลือเติม space (ใน SQL) หรือเป็น garbage (ใน C)