সরাসরি পর্বে যান
পর্ব ১৮ · ৫৫-এর মধ্যে · মডিউল ৩

কোড — BCD, ASCII, Unicode আর প্যারিটি

Codes & Encoding — BCD, Gray, ASCII, Unicode, UTF-8 and Parity

Taught in Bangla, this lesson explains a code as an agreed table mapping bit patterns to digits and characters. It covers BCD, excess-3 and Gray code conversions, ASCII and EBCDIC, Unicode with UTF-8, UTF-16 and UTF-32, character set versus encoding, creating and checking parity bits, the ideas behind checksums, Hamming code and CRC, barcode check digits, QR error correction and Morse code.

এই পর্বে যা শিখবেন

  • কোড কী, আর কেন একেক কাজের জন্য একেক রকম কোড বানানো হয়
  • BCD, excess-3 আর Gray code — রূপান্তরের পাঠ্যবই-পদ্ধতি, পরীক্ষার খাতার মতো সাজিয়ে
  • ASCII, EBCDIC, Unicode আর UTF-8/16/32 — character set আর encoding-এর পার্থক্য, হিজিবিজি লেখার কারণ
  • প্যারিটি বিট তৈরি ও যাচাই, checksum, Hamming আর CRC-এর মূল ধারণা
  • বারকোডের check digit হিসাব, QR কোড আর Morse code-এর পেছনের বুদ্ধি

১ · কোড কী — একটি চুক্তির টেবিল

ক্রিকেট মাঠের কথা ভাবুন। আম্পায়ার দুই হাত মাথার ওপরে তুললেন — দর্শক সবাই বুঝল, ছক্কা। এক হাত সামনে-পেছনে নাড়লেন — চার। আঙুল তুললেন — আউট। হাতের এই ভঙ্গিগুলো নিজে থেকে কিছুই বলে না। কিন্তু খেলোয়াড়, স্কোরার আর দর্শক সবাই একটি চুক্তি মানেন বলে ভঙ্গিগুলো অর্থ পায়। যে কোনোদিন ক্রিকেট দেখেনি, তার কাছে এগুলো শুধুই হাত নাড়া।

কম্পিউটারের ভেতরেও ঠিক তাই। পর্ব ০৪-এ দেখেছেন, সবকিছু থাকে bit হয়ে — 0 আর 1. আর পর্ব ১৬-এ দেখছেন, সংখ্যাকে কীভাবে binary-তে লেখা হয়। কিন্তু অক্ষর, চিহ্ন, ঘড়ির অঙ্ক — এগুলো বিটে রাখতে হলে একটি টেবিল লাগে: “এই বিট-নকশা মানে এই চিহ্ন”। এই টেবিলের নামই কোড (code). আর কোনো তথ্যকে সেই টেবিল মেনে বিটে বদলানোর কাজকে বলে encoding; উল্টো কাজটি decoding.

একটি পরীক্ষা করি। নিচের আটটি বিট দেখুন: 01000001. এর মানে কী?

কোন টেবিল দিয়ে পড়ছেন01000001-এর অর্থ
সাধারণ binary সংখ্যা (পর্ব ১৬)৬৫
ASCII অক্ষরইংরেজি বড় হাতের A
BCD (প্রতি ৪ বিটে একটি দশমিক অঙ্ক)0100 = 4, 0001 = 1, অর্থাৎ ৪১
Gray code (৮ বিটের)দশমিকে ১২৬
EBCDIC (IBM মেইনফ্রেমের কোড)এটি কোনো ইংরেজি অক্ষর বা অঙ্ক নয়; সেখানে A হলো 11000001
মূল ধারণা

বিট নিজে কিছু বোঝায় না — অর্থ আসে টেবিল থেকে। একই আটটি বিট কোথাও ৬৫, কোথাও A, কোথাও ৪১. তাই ফাইল লেখা আর পড়ার সময় একই কোড মানতে হয়। না মানলে হয় ভুল সংখ্যা, নয়তো হিজিবিজি লেখা — যা আমরা অংশ ৫-এ দেখব।

তাহলে একটি কোডেই সব কাজ চলে না কেন? কারণ প্রতিটি কোড একটি নির্দিষ্ট সমস্যা সমাধানের জন্য বানানো, আর সেই কাজে সে সেরা:

🔢 সংখ্যাসূচক কোড

দশমিক অঙ্ক সহজে দেখানো বা যন্ত্রের অবস্থান নিরাপদে পড়ার জন্য। ক্যালকুলেটরের পর্দা, ডিজিটাল ঘড়ি, ঘুরন্ত নব।

BCD, excess-3, Gray

🔤 আলফানিউমেরিক কোড

অক্ষর, অঙ্ক আর চিহ্ন — অর্থাৎ লেখা — রাখার জন্য। এগুলোকে alphanumeric code বলে।

ASCII, EBCDIC, Unicode

🛡️ ভুল ধরার কোড

পাঠানোর পথে কোনো বিট উল্টে গেলে প্রাপক যেন বুঝতে পারেন। কিছু কোড ভুল ঠিকও করে দেয়।

Parity, checksum, CRC, Hamming

📦 দৈনন্দিন কোড

দোকানের পণ্য চেনা, টাকা পাঠানো, দূরে বার্তা পাঠানো — যন্ত্রে পড়ার উপযোগী রূপ।

বারকোড, QR, Morse

বিটের কোড কম্পিউটারের চেয়েও পুরোনো। ১৮৩০–৪০-এর দশকে Samuel Morse আর Alfred Vail টেলিগ্রাফের জন্য ডট-ড্যাশের Morse code বানান। ১৮৭০-এর দশকে ফরাসি প্রকৌশলী Émile Baudot টেলিগ্রাফের জন্য একটি ৫-বিটের কোড তৈরি করেন — প্রতিটি অক্ষর ঠিক পাঁচটি “আছে/নেই” সংকেত। ডেটা পাঠানোর গতির একক “baud” তাঁর নামেই। কম্পিউটার এসে এই ধারণাগুলোকেই বড় করেছে।

২ · BCD — দশমিকের প্রতিটি অঙ্ক আলাদা ৪ বিটে

একটি ক্যালকুলেটরে 59 চাপলেন। পর্দায় দুটি অঙ্ক দেখাতে হবে — 5 আর 9. পুরো সংখ্যাটিকে binary-তে বদলালে হয় 111011. কিন্তু এখান থেকে “5” আর “9” আলাদা করে পর্দায় দেখাতে আবার ভাগ-অঙ্ক করে দশমিকে ফেরাতে হয়। ছোট, সস্তা যন্ত্রের জন্য এটা বাড়তি ঝামেলা।

সমাধান: পুরো সংখ্যা নয়, প্রতিটি দশমিক অঙ্ককে আলাদা করে ৪ বিটে লেখা। এর নাম BCD (Binary Coded Decimal). ৪ বিটের প্রতিটি ঘরের মান 8, 4, 2, 1 — তাই একে 8421 কোড-ও বলে। যেহেতু প্রতিটি ঘরের নির্দিষ্ট মান (ওজন) আছে, BCD একটি weighted code. ৪ বিটের এই দলকে পর্ব ০৪-এ nibble নামে চিনেছেন।

5দশকের অঙ্ক
9এককের অঙ্ক
01015 = 4 + 1
10019 = 8 + 1
111011পুরো 59, বিশুদ্ধ binary
32 + 16 + 8 + 2 + 1= 59
  1. সংখ্যাটিকে অঙ্কে ভাঙুন। 59-এ দুটি দশমিক অঙ্ক — 5 আর 9. BCD-তে প্রতিটি অঙ্কের ভাগ্য আলাদা; একটির হিসাব আরেকটিকে ছোঁয় না।
  2. প্রতিটি অঙ্ক ৪ বিটে। 5 = 4 + 1, তাই 8421 ঘরে 0101. 9 = 8 + 1, তাই 1001. পাশাপাশি বসালে 59 = 0101 1001BCD. ৪ বিটের দলগুলোর মাঝে ফাঁক রাখা পরীক্ষার খাতায় ভালো অভ্যাস।
  3. এবার বিশুদ্ধ binary. পর্ব ১৬-এর ভাগ পদ্ধতিতে পুরো 59-কে একসাথে বদলালে পাই 111011 — কারণ 32 + 16 + 8 + 2 + 1 = 59. এখানে কোনো অঙ্ক আলাদা নেই; পুরো সংখ্যাটাই একটি নকশা।
  4. তুলনা করুন। BCD নিল ৮ বিট, binary মাত্র ৬ বিট। BCD একটু বেশি জায়গা খায়, কিন্তু প্রতিটি ৪-বিটের দল সরাসরি একটি অঙ্ক — পর্দায় দেখানো বা দশমিকে ফেরানো একদম সহজ। সংখ্যা যত বড়, জায়গার পার্থক্য তত বাড়ে।

BCD-র টেবিল আর অবৈধ কোড

০ থেকে ৯ — দশটি অঙ্কের জন্য দশটি কোড লাগে। কিন্তু ৪ বিটে নকশা হয় ২৪ = ১৬টি। বাকি ছয়টি — 1010 থেকে 1111 (দশমিকে ১০–১৫) — BCD-তে অবৈধ; কোনো অঙ্ক বোঝায় না। কোনো BCD সংখ্যার ভেতরে এর একটিও দেখলে বুঝবেন, সংখ্যাটি ভুল।

দশমিক অঙ্কBCD (8421)Excess-3
০00000011
১00010100
২00100101
৩00110110
৪01000111
৫01011000
৬01101001
৭01111010
৮10001011
৯10011100
অবৈধ (BCD-তে)1010–1111—

পরীক্ষার খাতার মতো — দুটি উদাহরণ

উদাহরণ ১: (2026)10-কে BCD-তে প্রকাশ করুন।

দশমিক অঙ্ক :    2      0      2      6
BCD (8421) :  0010   0000   0010   0110
∴ (2026)10 = (0010 0000 0010 0110)BCD

উদাহরণ ২: (1001 0011 0111)BCD-কে দশমিকে প্রকাশ করুন। ডান থেকে নয়, বাঁ থেকে ৪টি করে বিট নিয়ে প্রতিটি দলকে একটি অঙ্ক বানান:

BCD        :  1001   0011   0111
দশমিক অঙ্ক :    9      3      7
∴ উত্তর = (937)10

খেয়াল করুন: binary-তে 100100110111 পড়লে মান হতো ২৩৫৯ — সম্পূর্ণ আলাদা। প্রশ্নে “BCD” লেখা আছে কি না, আগে দেখে নিন।

BCD কোথায় ব্যবহার হয়

  • ক্যালকুলেটর আর ডিজিটাল ঘড়ি: প্রতিটি অঙ্ক আলাদা থাকায় সরাসরি seven-segment display-এ (আটের মতো সাতটি দাগের পর্দা) পাঠানো যায়।
  • কম্পিউটারের ভেতরের ঘড়ি (RTC চিপ): অনেক চিপ সময় আর তারিখ BCD-তেই রাখে।
  • টাকার হিসাব: দশমিক ভগ্নাংশ (যেমন ০.১ টাকা) binary-তে হুবহু লেখা যায় না, সামান্য গোলমাল থাকে। তাই ব্যাংকের পুরোনো mainframe সিস্টেম আর কিছু হিসাবের সফটওয়্যার দশমিক-ভিত্তিক কোড ব্যবহার করে।

Excess-3 — এক নজরে

Excess-3 (XS-3) কোডে প্রতিটি দশমিক অঙ্কের সাথে ৩ যোগ করে তারপর ৪ বিটে লেখা হয়। যেমন 5 → 5 + 3 = 8 → 1000. তাই 59-এর excess-3 হলো 1000 1100. এর ঘরগুলোর নির্দিষ্ট ওজন নেই, তাই এটি unweighted কোড। এর একটি বিশেষ গুণ আছে — এটি self-complementing: কোনো অঙ্কের সব বিট উল্টে দিলে (0 ↔ 1) পাওয়া যায় ৯ থেকে সেই অঙ্ক বিয়োগের ফল। যেমন 4 = 0111; উল্টালে 1000 = 5, আর 9 − 4 = 5. পুরোনো যন্ত্রে দশমিক বিয়োগ সহজ করতে এই গুণটি কাজে লাগত (complement দিয়ে বিয়োগের ধারণা পর্ব ১৭-এ দেখেছেন)।

৩ · Gray code — প্রতিবার মাত্র একটি বিট বদলায়

সাধারণ binary-তে ৭ থেকে ৮-এ যেতে কী হয় দেখুন: 0111 → 1000. চারটি বিটই একসাথে বদলাল। কাগজে সমস্যা নেই। কিন্তু একটি যন্ত্রের কথা ভাবুন — ধরুন একটি ঘুরন্ত চাকা, যার অবস্থান চারটি সেন্সর পড়ে। চারটি সেন্সর কখনো ঠিক একই মুহূর্তে বদলায় না। বদলের মাঝপথে কোনোটি আগে, কোনোটি পরে — ফলে মুহূর্তের জন্য 1111 (১৫) বা 0000 (০)-এর মতো সম্পূর্ণ ভুল মান পড়া হতে পারে। একটি রোবটের হাত হঠাৎ ভাবল সে ০ ডিগ্রিতে আছে!

Gray code এই সমস্যার চমৎকার সমাধান: এর নিয়মে পরপর দুটি মানের মধ্যে ঠিক একটি বিট বদলায়। তাই মাঝপথে ভুল পড়লেও সেটি হয় আগের মান, নয়তো পরের মান — কখনো দূরের কোনো মান নয়। এর ঘরগুলোরও নির্দিষ্ট ওজন নেই, তাই এটিও unweighted কোড। একে reflected binary code-ও বলে।

দশমিকBinaryGray codeআগের মান থেকে কয়টি বিট বদলাল (Gray)
০000000—
১001001১টি
২010011১টি
৩011010১টি
৪100110১টি (binary-তে এখানে ৩টি!)
৫101111১টি
৬110101১টি
৭111100১টি — আর ৭ থেকে ০-তে ফিরতেও ১টি

শেষ সারিটি খেয়াল করুন: 100 থেকে আবার 000-এ ফিরতেও একটি বিট বদলায়। তাই Gray code বৃত্তাকার চাকার জন্য একদম উপযুক্ত। এই কারণেই rotary encoder — রোবটের হাতের জোড়, শিল্প-কারখানার মোটর আর CNC মেশিনের অবস্থান মাপার সেন্সর — Gray code ব্যবহার করে।

Binary থেকে Gray — XOR-এর নিয়ম

রূপান্তরে একটিই অপারেশন লাগে — XOR (⊕): দুটি বিট আলাদা হলে 1, একই হলে 0. (0⊕0 = 0, 0⊕1 = 1, 1⊕0 = 1, 1⊕1 = 0. লজিক গেট হিসেবে XOR আসছে পর্ব ২০-এ।) নিচে 1011-কে ধাপে ধাপে Gray code-এ বদলাই:

ধাপ ১বাঁ দিকের প্রথম বিট হুবহু নামান
Binary :  1   0   1   1
Gray   :  1   _   _   _
ধাপ ২প্রথম আর দ্বিতীয় বিটের XOR
Binary :  1 ⊕ 0   1   1
Gray   :  1   1   _   _
ধাপ ৩পাশাপাশি জোড়া ধরে এগোন
Binary :  1   0 ⊕ 1   1      → 1
Binary :  1   0   1 ⊕ 1      → 0
Gray   :  1   1   1   0
ধাপ ৪উত্তর আর উল্টো পথে যাচাই
(1011)binary = (1110)Gray

যাচাই (Gray → Binary):
B1 = G1 = 1
B2 = B1 ⊕ G2 = 1 ⊕ 1 = 0
B3 = B2 ⊕ G3 = 0 ⊕ 1 = 1
B4 = B3 ⊕ G4 = 1 ⊕ 0 = 1   → 1011 ✓
  1. প্রথম বিট একই থাকে। সবচেয়ে বাঁয়ের বিট (MSB) Gray code-এও হুবহু নেমে আসে। এখানে 1.
  2. এবার পাশাপাশি জোড়া। Binary-র প্রথম আর দ্বিতীয় বিটের XOR: 1 ⊕ 0 = 1. এটাই Gray-এর দ্বিতীয় বিট।
  3. একই নিয়ম চালিয়ে যান। দ্বিতীয় ও তৃতীয়: 0 ⊕ 1 = 1. তৃতীয় ও চতুর্থ: 1 ⊕ 1 = 0. প্রতিবার binary-র দুটি পাশাপাশি বিট নিচ্ছি — Gray-এর বিট নয়।
  4. উত্তর 1110, আর উল্টো পথে যাচাই। Gray থেকে binary-তে ফেরার নিয়ম একটু আলাদা: প্রথম বিট একই; তারপর সদ্য পাওয়া binary বিট ⊕ পরের Gray বিট। ফিরে পেলাম 1011 — তাই উত্তর ঠিক। পরীক্ষায় সময় থাকলে এভাবে উল্টো পথে মিলিয়ে নেওয়া ভালো অভ্যাস।

৪ · ASCII আর EBCDIC — ইংরেজি লেখার কোড

পর্ব ০৭-এ ASCII-র সাথে আপনার পরিচয় হয়েছে। এবার ভেতরে ঢুকি। ASCII (American Standard Code for Information Interchange) প্রথম প্রকাশিত হয় ১৯৬৩ সালে। এটি ৭ বিটের কোড — তাই ঘর ২৭ = ১২৮টি (০ থেকে ১২৭)। ঘরগুলো এভাবে ভাগ করা:

দশমিক মানHexকী আছেউদাহরণ
০–৩১, আর ১২৭00–1F, 7FControl character (দেখা যায় না)10 = নতুন লাইন (LF), 13 = CR, 9 = Tab, 27 = Esc
৩২20ফাঁকা জায়গা (space)Space bar
৪৮–৫৭30–39অঙ্ক'0' = 48, '9' = 57
৬৫–৯০41–5Aবড় হাতের অক্ষরA = 65, Z = 90
৯৭–১২২61–7Aছোট হাতের অক্ষরa = 97, z = 122
বাকি ঘর—যতিচিহ্ন আর প্রতীক! = 33, @ = 64

প্রথম ৩২টি ঘর আর ১২৭ হলো control character — এগুলো ছাপা হয় না, যন্ত্রকে নির্দেশ দেয়: “নতুন লাইনে যাও”, “ঘণ্টা বাজাও”, “এক ঘর পিছাও”। এগুলো এসেছে টেলিপ্রিন্টার যন্ত্রের যুগ থেকে। আজও Windows-এ টেক্সট ফাইলে লাইন শেষ হয় CR + LF (১৩, ১০) দিয়ে, আর Linux-এ শুধু LF (১০) দিয়ে — তাই একটি ফাইল কখনো কখনো অন্য সিস্টেমে সব লাইন এক লাইনে জোড়া দেখায়।

অঙ্কের ঘরটিও খেয়াল করুন: অক্ষর '0'-এর ASCII মান 48, সংখ্যা শূন্য নয়। কি-বোর্ডে “7” চাপলে কম্পিউটার পায় 55; গণনা করার আগে প্রোগ্রামকে 48 বিয়োগ করে আসল সংখ্যা 7 বের করতে হয়।

ধাপ ১আপনি যা লিখলেন
C     a     t        ← তিনটি অক্ষর, তিনটি আলাদা ঘর
ধাপ ২ASCII টেবিলে নম্বর খোঁজা
C  →  67     (hex 43)
a  →  97     (hex 61)
t  →  116    (hex 74)
ধাপ ৩প্রতিটি নম্বর ৭ বিটের binary-তে
67   = 64 + 2 + 1          → 1000011
97   = 64 + 32 + 1         → 1100001
116  = 64 + 32 + 16 + 4    → 1110100
ধাপ ৪এক বাইট করে — তারে বা ফাইলে
01000011 01100001 01110100
↑ ৮ নম্বর বিট: 0, বা প্যারিটি বিট (অংশ ৬)
মোট ২৪টি বিট, পরপর — ‿‾‾‿‿‿‾‾ …
  1. লেখা। আপনি কি-বোর্ডে C, a, t চাপলেন। পর্দায় একটি শব্দ, কিন্তু কম্পিউটারের কাছে এটি তিনটি আলাদা চিহ্নের সারি।
  2. টেবিলে নম্বর। ASCII টেবিল দেখে প্রতিটি অক্ষরের নম্বর: C = 67, a = 97, t = 116. খেয়াল করুন, বড় C আর ছোট c (99) আলাদা নম্বর — তাই পাসওয়ার্ডে বড়-ছোট হাতের অক্ষর আলাদা ধরা হয়।
  3. Binary-তে। পর্ব ১৬-এর পদ্ধতিতে প্রতিটি নম্বর ৭ বিটে। 67-এ আছে 64, 2 আর 1 — তাই 1000011. বাকিগুলোও একইভাবে।
  4. তারে পাঠানো। কম্পিউটার সাধারণত ৮ বিটের একটি byte-এ একটি ASCII অক্ষর রাখে; বাড়তি বাঁয়ের বিটটি 0, অথবা পুরোনো যোগাযোগ-ব্যবস্থায় সেটি ভুল ধরার প্যারিটি বিট। তারপর ২৪টি বিট একটার পর একটা ভোল্টেজের ওঠানামা হয়ে চলে যায়। প্রাপক ঠিক উল্টো পথে — বিট → নম্বর → টেবিল → অক্ষর — “Cat” ফিরে পান।

বড় হাত আর ছোট হাতের রহস্য — একটি বিট, মান ৩২

A = 65 আর a = 97. পার্থক্য ঠিক ৩২. এটা কাকতালীয় নয় — নকশাকারীরা ইচ্ছা করেই এমন রেখেছিলেন। binary-তে দেখুন:

A = 1000001   (65)
a = 1100001   (97)
        ↑ শুধু এই একটি বিট (মান 32) আলাদা

তাই বড় হাতকে ছোট হাত বানাতে শুধু একটি বিট 1 করলেই চলে, উল্টোটা করতে 0. পুরোনো ধীর কম্পিউটারে এই সহজ কৌশল অনেক সময় বাঁচাত। একইভাবে অঙ্কগুলো 48 (hex 30) থেকে শুরু, তাই '7' = hex 37 — শেষের অঙ্কটিই আসল সংখ্যা।

Extended ASCII আর code page-এর বিশৃঙ্খলা

কম্পিউটারের byte ৮ বিটের, অথচ ASCII নেয় ৭ বিট। বাড়তি বিটটি কাজে লাগালে আরও ১২৮টি ঘর (১২৮–২৫৫) পাওয়া যায়। এই ৮ বিটের সংস্করণগুলোকে একসাথে বলে extended ASCII. সমস্যা হলো, এর কোনো একক মান ছিল না। পশ্চিম ইউরোপে ঘর ২৩৩ মানে é, রাশিয়ার code page-এ সেখানে সিরিলিক অক্ষর, আর বিজয়-যুগের বাংলা ফন্ট সেখানে বসাত বাংলা অক্ষরের টুকরো (পর্ব ০৭-এর “Avwg” সমস্যা)। পাঠ্যবইয়ে এ কারণে “ASCII-7” (১২৮ অক্ষর) আর “ASCII-8” (২৫৬ অক্ষর) — দুটি নামই পাবেন।

EBCDIC — IBM-এর নিজস্ব পথ

ASCII-র প্রায় একই সময়ে, ১৯৬৪ সালে IBM তাদের বিখ্যাত System/360 মেইনফ্রেমের জন্য নিজস্ব ৮ বিটের কোড ব্যবহার শুরু করে — EBCDIC (Extended Binary Coded Decimal Interchange Code). এটি এসেছে punched card-এর পুরোনো BCD-ভিত্তিক নকশা থেকে। তাই এখানে অক্ষরগুলো একটানা নয়: A–I হলো hex C1–C9, তারপর একটি ফাঁক, J শুরু D1 থেকে। অঙ্ক 0–9 হলো F0–F9. আজও কিছু ব্যাংক আর বিমা কোম্পানির IBM মেইনফ্রেমে EBCDIC চলে; সেখান থেকে ডেটা আনতে রূপান্তর লাগে।

৫ · Unicode, UTF-8, UTF-16 আর UTF-32

পর্ব ০৭-এ দেখেছেন, code page-এর বিশৃঙ্খলা দূর করতে এসেছে Unicode — পৃথিবীর প্রায় সব লিপির প্রতিটি অক্ষর ও চিহ্নের জন্য একটি করে স্থায়ী নম্বর, যার নাম code point. যেমন A = U+0041 (ASCII-র ৬৫, hex-এ ৪১ — হুবহু একই), “আ” = U+0986, আর হাসিমুখ 😀 = U+1F600. বাংলার ব্লক U+0980–U+09FF. এই পর্বে আমরা দেখব বড় ছবিটি — কোড-স্পেস কত বড়, আর নম্বর থেকে বাইট বানানোর তিনটি নিয়ম।

কোড-স্পেস: ১৭টি plane

Unicode-এর নম্বর চলে U+0000 থেকে U+10FFFF পর্যন্ত — মোট ১১,১৪,১১২টি ঘর। এগুলো ১৭টি plane-এ ভাগ করা, প্রতিটিতে ৬৫,৫৩৬টি ঘর। প্রথমটি Plane 0 — Basic Multilingual Plane (BMP): এখানে ইংরেজি, বাংলা, আরবি, হিন্দি, চীনা-জাপানির বেশিরভাগ — আধুনিক লেখার প্রায় সবকিছু। ইমোজি, প্রাচীন লিপি আর বিরল চীনা অক্ষর থাকে পরের plane-গুলোতে; যেমন 😀 আছে Plane 1-এ। এখন পর্যন্ত দেড় লাখের বেশি অক্ষর বরাদ্দ হয়েছে, আর প্রতি বছর নতুন সংস্করণে কিছু যোগ হয়।

Character set বনাম encoding — দুটি আলাদা প্রশ্ন

অনেকে “Unicode” আর “UTF-8” এক জিনিস ভাবেন। আসলে এরা দুটি আলাদা প্রশ্নের উত্তর:

  • Character set — “কোন অক্ষরের নম্বর কত?” Unicode এই তালিকা। “আ” = U+0986 — ব্যস, এর বেশি কিছু বলে না।
  • Encoding — “সেই নম্বর বাইটে কীভাবে লিখব?” একই নম্বর লেখার কয়েকটি নিয়ম আছে: UTF-8, UTF-16 আর UTF-32.

বাসার ঠিকানার কথা ভাবুন। “বাড়ি ১২, রোড ৫, ধানমন্ডি” — এটা ঠিকানা, সবার কাছে একই (character set). কিন্তু খামে সেটি লেখা যায় বাংলায়, ইংরেজিতে, বা পোস্ট কোডসহ সংক্ষেপে (encoding). লেখার ধরন আলাদা, বাড়ি একই। শর্ত একটাই: পিয়ন যেন জানেন কোন ধরনে লেখা হয়েছে।

অক্ষরCode pointUTF-8UTF-16UTF-32
AU+004141 — ১ বাইট0041 — ২ বাইট00000041 — ৪ বাইট
আU+0986E0 A6 86 — ৩ বাইট0986 — ২ বাইট00000986 — ৪ বাইট
😀U+1F600F0 9F 98 80 — ৪ বাইটD83D DE00 — ৪ বাইট0001F600 — ৪ বাইট
  • UTF-8 (১ থেকে ৪ বাইট): ছোট নম্বরে কম বাইট। U+007F পর্যন্ত ১ বাইট, U+07FF পর্যন্ত ২, U+FFFF পর্যন্ত ৩ (বাংলা এখানে), তার ওপরে ৪. এর সবচেয়ে বড় গুণ — ASCII-compatible: যেকোনো পুরোনো ASCII ফাইল হুবহু একটি বৈধ UTF-8 ফাইল। “আ” কীভাবে ঠিক E0 A6 86 হয়, সেই ছাঁচের হিসাব পর্ব ০৭-এ ধাপে ধাপে দেখেছেন। আজকের প্রায় সব ওয়েবপেজ UTF-8-এ।
  • UTF-16 (২ বা ৪ বাইট): BMP-র অক্ষর ২ বাইটে; তার বাইরের অক্ষর (যেমন ইমোজি) দুটি ২-বাইটের টুকরো জোড়া দিয়ে ৪ বাইটে — একে বলে surrogate pair (D83D DE00). Windows-এর ভেতরে আর Java ও JavaScript-এর string-এ এটি ব্যবহার হয়। বাংলা লেখা UTF-16-এ UTF-8-এর চেয়ে কম জায়গা নেয় (২ বনাম ৩ বাইট), কিন্তু ইংরেজি নেয় দ্বিগুণ।
  • UTF-32 (সবসময় ৪ বাইট): সবচেয়ে সরল — code point-টাই সোজা ৪ বাইটে। “১০০তম অক্ষর কোথায়” — এক লাফে বের করা যায়। কিন্তু জায়গা অনেক বেশি খায়, তাই ফাইলে প্রায় দেখা যায় না; প্রোগ্রামের ভেতরের কাজে মাঝে মাঝে ব্যবহার হয়।

Mojibake — হিজিবিজি লেখা কেন হয়

কখনো ইমেইল বা ওয়েবপেজে এমন দেখেছেন — আমি? এর জাপানি নাম mojibake (文字化け, “রূপ বদলে যাওয়া অক্ষর”)। এটা পর্ব ০৭-এর “Avwg” সমস্যা থেকে আলাদা — সেখানে ছিল ফন্টের কৌশল; এখানে encoding-এর অমিল। ঘটনাটি এমন:

“আমি” কীভাবে “আমি” হলো

Written as UTF-8, read as Windows-1252

  1. লেখা হলো UTF-8-এআ = E0 A6 86৩টি অক্ষর, ৯ বাইট
  2. পড়া হলো পুরোনো code page-এপ্রতি বাইট = ১ অক্ষরWindows-1252 ধরে নিল
  3. পর্দায়E0→à A6→¦ 86→†৯টি ভুল অক্ষর
ছবি ১৮.১ — বাইটগুলো একদম ঠিক আছে; ভুল শুধু পড়ার টেবিলে। সঠিক encoding (UTF-8) বেছে নিলেই লেখা ফিরে আসে।

সমাধানও তাই সহজ: ব্রাউজার বা এডিটরে encoding “UTF-8” বেছে নিন। ওয়েবপেজে <meta charset="UTF-8"> লাইনটি ঠিক এই ঘোষণাই করে। আর যদি বাইটগুলো সত্যিই এমন হয় যা UTF-8-এ বৈধ নয়, সফটওয়্যার সেখানে বসায় একটি বিশেষ চিহ্ন � (U+FFFD) — “এখানে কিছু একটা পড়া যায়নি”। ফাইল সেভ করার সময় একবার সেই চিহ্ন বসে গেলে আসল লেখা চিরতরে হারিয়ে যায়।

৬ · প্যারিটি বিট — ভুল ধরার সবচেয়ে সহজ কৌশল

তার, বাতাস বা চুম্বকীয় ডিস্ক — কোনো মাধ্যমই নিখুঁত নয়। বিদ্যুতের ঝটকা, বজ্রপাত, মহাজাগতিক রশ্মি বা দুর্বল সিগন্যালে মাঝে মাঝে একটি 0 উল্টে 1 হয়ে যায়। তখন প্রাপক কীভাবে বুঝবেন যে ভুল হয়েছে? একে বলে error detection.

সবচেয়ে সহজ কৌশল parity bit: ডেটার সাথে একটি বাড়তি বিট জুড়ে দেওয়া, যাতে মোট 1-এর সংখ্যা একটি নির্দিষ্ট নিয়ম মানে। নিয়ম দুই রকম:

  • Even parity (জোড় প্যারিটি): প্যারিটি বিটসহ মোট 1-এর সংখ্যা জোড় হবে।
  • Odd parity (বিজোড় প্যারিটি): প্যারিটি বিটসহ মোট 1-এর সংখ্যা বিজোড় হবে।

প্রেরক আর প্রাপক আগেই ঠিক করে নেন কোন নিয়ম চলবে — আবারও সেই চুক্তি! নিচের টেবিলে ৭ বিটের কয়েকটি ডেটার প্যারিটি বিট হিসাব করা হলো। এখানে প্যারিটি বিট বসানো হয়েছে বাঁ দিকে (MSB); কেউ কেউ ডানে বসান — প্রশ্নে যা বলা থাকে, সেটাই মানবেন।

৭ বিটের ডেটা1-এর সংখ্যাEven parity বিটপাঠানো ৮ বিট (even)Odd parity বিটপাঠানো ৮ বিট (odd)
1011001৪ (জোড়)001011001111011001
1000011 (C)৩ (বিজোড়)111000011001000011
1110100 (t)৪ (জোড়)001110100111110100
0000000০ (জোড়)000000000110000000

শেষ সারিটি একটি কারণে মজার: odd parity-তে সব-শূন্য ডেটাও অন্তত একটি 1 নিয়ে যায়। তাই “তার ছিঁড়ে গিয়ে শুধু 0 আসছে” — এমন অবস্থাও ধরা পড়ে। এবার পুরো ঘটনাটি দেখুন:

প্রেরক৭ বিটের ডেটা
ডেটা      :  1 0 1 1 0 0 1
1 গুনুন   :  1 + 1 + 1 + 1 = ৪টি  (জোড়)
প্রেরকপ্যারিটি বিট যোগ
ইতিমধ্যে জোড় → প্যারিটি বিট = 0
পাঠানো হলো :  0 1 0 1 1 0 0 1   (মোট 1 = ৪, জোড়)
পথেএকটি বিট উল্টে গেল
পাঠানো   :  0 1 0 1 1 0 0 1
            ⚡ নয়েজ
পৌঁছাল   :  0 1 1 1 1 0 0 1
প্রাপক1 গুনে যাচাই
পৌঁছাল   :  0 1 1 1 1 0 0 1
1 আছে    :  ৫টি — বিজোড়!
নিয়ম ছিল জোড় → ভুল ধরা পড়েছে, আবার পাঠানোর অনুরোধ
সীমাবদ্ধতাদুটি বিট একসাথে উল্টালে
পাঠানো   :  0 1 0 1 1 0 0 1
পৌঁছাল   :  0 1 1 1 1 1 0 1
1 আছে    :  ৬টি — জোড় → প্রাপক ভাবল “সব ঠিক” ✗
  1. 1 গুনুন। প্রেরকের ডেটা 1011001. এতে 1 আছে চারটি — সংখ্যাটি ইতিমধ্যেই জোড়।
  2. প্যারিটি বিট বসান। Even parity চাই, আর 1 ইতিমধ্যে জোড়, তাই প্যারিটি বিট 0. পাঠানো হলো আট বিট 01011001. (1-এর সংখ্যা বিজোড় হলে প্যারিটি বিট হতো 1, যাতে মোট জোড় হয়।)
  3. পথে দুর্ঘটনা। তারে একটু নয়েজ এলো, তৃতীয় বিটটি 0 থেকে 1 হয়ে গেল। প্রাপক পেলেন 01111001 — তিনি জানেন না কোনটি বদলেছে।
  4. প্রাপকের যাচাই। প্রাপক আবার 1 গুনলেন — পাঁচটি, বিজোড়। কিন্তু চুক্তি ছিল জোড়! তাই নিশ্চিত, কোথাও ভুল হয়েছে। তিনি ডেটাটি ফেলে দিয়ে আবার পাঠাতে বলবেন। তবে খেয়াল করুন — প্যারিটি বলতে পারে না কোন বিটটি ভুল, তাই নিজে ঠিক করতে পারে না।
  5. দুর্বলতা। এবার ধরুন দুটি বিট একসাথে উল্টাল। ৪ + ২ = ৬টি 1 — আবার জোড়! প্রাপক কিছুই টের পেলেন না। একইভাবে চারটি, ছয়টি — যেকোনো জোড় সংখ্যক বিটের ভুল প্যারিটি ধরতে পারে না; বিজোড় সংখ্যক ভুল ধরে।
মূল ধারণা

প্যারিটি বিট একটি বিটের ভুল ধরতে পারে, কিন্তু ঠিক করতে পারে না; আর দুটি বিট একসাথে উল্টালে ধরতেও পারে না। দাম মাত্র একটি বাড়তি বিট — তাই যেখানে ভুল কদাচিৎ হয় আর একসাথে একটির বেশি হয় না, সেখানে এটাই যথেষ্ট। পুরোনো RAM, সিরিয়াল পোর্টের যোগাযোগ আর কিছু স্টোরেজ ব্যবস্থায় এটি ব্যবহার হতো।

নিজে চালিয়ে দেখুন — একটি ছোট কোড-এনকোডার

নিচের প্রোগ্রামটি এই পর্বের সব কোড একসাথে হিসাব করে: “Cat”-এর ASCII, 59-এর BCD আর binary, ০–৭-এর Gray code, 1011001-এর প্যারিটি, আর তিনটি অক্ষরের UTF-8 ও UTF-16 বাইট। কোড বোঝার দরকার নেই — “চালান” চেপে আউটপুট মিলিয়ে দেখুন উপরের টেবিলগুলোর সাথে:

const toBin = (n, w) => n.toString(2).padStart(w, "0");
for (const ch of "Cat") {                       // ASCII
  const c = ch.charCodeAt(0);
  console.log(`${ch} = ${c} = 0x${c.toString(16).toUpperCase()} = ${toBin(c, 7)}`);
}
const num = 59;                                  // BCD বনাম binary
const bcd = [...String(num)].map(d => toBin(Number(d), 4)).join(" ");
console.log(`${num}: BCD ${bcd} | binary ${toBin(num, 1)}`);
const gray = [];                                 // Gray code 0-7
for (let n = 0; n < 8; n++) gray.push(toBin(n ^ (n >> 1), 3));
console.log("Gray 0-7: " + gray.join(" ") + " | 1011 -> " + toBin(0b1011 ^ 0b101, 4));
const bits = "1011001";                          // প্যারিটি
const ones = [...bits].filter(b => b === "1").length;
console.log(`${bits}: ${ones}টি 1 -> even parity ${ones % 2}, odd parity ${1 - ones % 2}`);
const enc = new TextEncoder();                   // UTF-8 বাইট
for (const s of ["A", "আ", "😀"]) {
  const hex = [...enc.encode(s)].map(b => b.toString(16).toUpperCase()).join(" ");
  console.log(`${s}: UTF-8 ${enc.encode(s).length} বাইট (${hex}), UTF-16 ${s.length * 2} বাইট`);
}

প্রথম তিন লাইন: C = 67 = 0x43 = 1000011, a = 97 = 0x61 = 1100001, t = 116 = 0x74 = 1110100 — “Cat” স্টেপারের সাথে হুবহু মেলে। তারপর 59: BCD 0101 1001 | binary 111011. Gray-এর লাইনে 000 001 011 010 110 111 101 100 আর 1011 -> 1110 — Gray টেবিল আর স্টেপারের উত্তর (n ^ (n >> 1) মানে “সংখ্যাটির সাথে এক ঘর ডানে সরানো সংখ্যার XOR”, ঠিক পাশাপাশি জোড়ার নিয়ম)। প্যারিটি: 4টি 1 -> even parity 0, odd parity 1. শেষ তিন লাইনে A, আ আর 😀 যথাক্রমে ১, ৩ আর ৪ বাইট UTF-8-এ, আর UTF-16-এ ২, ২ আর ৪ বাইট। একটি মজার জিনিস: JavaScript-এ "😀".length হয় 2, কারণ JavaScript string গোনে UTF-16-এর ২-বাইটের টুকরো, অক্ষর নয়।

৭ · Checksum, Hamming আর CRC — আরও শক্তিশালী পাহারাদার

প্যারিটি এক বাইটের পাহারাদার। কিন্তু পুরো একটি ফাইল বা নেটওয়ার্কের একটি প্যাকেট পাহারা দিতে আরও শক্তিশালী কৌশল লাগে। এখানে তিনটির মূল ধারণা দেখি — বিস্তারিত হিসাব নয়, শুধু বুদ্ধিটা।

Checksum — যোগফল মিলিয়ে দেখা

দোকানি মাল পাঠানোর চালানের নিচে মোট টাকা লিখে দেন। ক্রেতা আলাদা আলাদা দাম যোগ করে দেখেন মোটের সাথে মেলে কি না। Checksum ঠিক এই কাজ করে: প্রেরক ডেটার সংখ্যাগুলো একটি নির্দিষ্ট নিয়মে যোগ করে ফলটি সাথে পাঠান।

পাঠানো ডেটা :  25   40   60      checksum = 125
পৌঁছাল      :  25   44   60      নতুন যোগফল = 129 ≠ 125  → ভুল!

ইন্টারনেটের IP আর TCP প্যাকেটে এ ধরনের ১৬ বিটের checksum থাকে। তবে দুর্বলতাও আছে: দুটি সংখ্যার জায়গা অদলবদল হলে যোগফল একই থাকে, ভুল ধরা পড়ে না।

Hamming code — ভুল ধরা নয়, ঠিক করা

প্যারিটি বলে “ভুল আছে”, কিন্তু কোথায় বলে না। ১৯৫০ সালে Richard Hamming দেখালেন, কয়েকটি প্যারিটি বিটকে চতুরভাবে সাজালে ভুলটি কোন জায়গায়, সেটাও বলা যায় — আর binary-তে জায়গা জানা মানেই ঠিক করা, কারণ শুধু সেই বিটটি উল্টে দিলেই হলো। এই কাজকে বলে error correction.

সবচেয়ে পরিচিত রূপ Hamming code (7,4): ৪টি ডেটা বিটের সাথে ৩টি প্যারিটি বিট, মোট ৭. প্যারিটি বিট বসে ১, ২ আর ৪ নম্বর ঘরে, আর প্রতিটি ভিন্ন ভিন্ন ঘরের দল পাহারা দেয়। প্রাপক তিনটি যাচাই করে পান তিনটি ফল — পাশাপাশি বসালে একটি ৩ বিটের binary সংখ্যা। ফল 000 মানে সব ঠিক; ফল 101 মানে “৫ নম্বর ঘরের বিটটি উল্টে গেছে” — উল্টে দিন, ঠিক হয়ে গেল! সার্ভারের ECC RAM এই ধারণারই উন্নত রূপ ব্যবহার করে।

CRC — ভাগশেষ দিয়ে পাহারা

CRC (Cyclic Redundancy Check)-এ পুরো ডেটাকে একটি বিশাল binary সংখ্যা ধরে একটি আগে-ঠিক-করা সংখ্যা দিয়ে বিশেষ নিয়মে ভাগ করা হয়; ভাগশেষটি ডেটার সাথে পাঠানো হয়। প্রাপক একই ভাগ করেন — ভাগশেষ না মিললে ভুল। এটি পাশাপাশি অনেকগুলো বিট একসাথে নষ্ট হলেও (যেমন বজ্রপাতে এক ঝলকে) প্রায় সবসময় ধরে ফেলে। Ethernet-এর প্রতিটি ফ্রেম, ZIP ফাইল আর PNG ছবিতে CRC থাকে — ZIP খুলতে গিয়ে “CRC error” দেখলে বুঝবেন ফাইলটি নষ্ট হয়েছে।

কৌশলবাড়তি খরচভুল ধরে?ঠিক করে?কোথায়
Parity bitপ্রতি দলে ১ বিট১ (বা বিজোড় সংখ্যক) বিটের ভুলনাপুরোনো RAM, সিরিয়াল যোগাযোগ
Checksumপুরো প্যাকেটে ১৬ বা ৩২ বিটবেশিরভাগ ভুলনাIP, TCP
CRCসাধারণত ১৬ বা ৩২ বিটপ্রায় সব, পাশাপাশি গুচ্ছ ভুলওনাEthernet, Wi-Fi, ZIP, PNG
Hamming code৪ ডেটা বিটে ৩ বিটহ্যাঁ১ বিটের ভুলECC RAM, মহাকাশযান, SSD (উন্নত রূপ)

আরও গভীরে: Hamming code-এ কোন প্যারিটি বিট কোন ঘর পাহারা দেয়, CRC-র ভাগ কীভাবে XOR দিয়ে হয়, আর “Hamming distance” কেন একটি কোডের শক্তি মাপে — এসব হাতে-কলমে হিসাবসহ আছে আমাদের Computer Networks কোর্সে: দেখুন error detection — parity, checksum, CRC আর error correction — Hamming code. ডেটা পাঠানো আর ইন্টারনেট নিয়ে এই কোর্সে আরও আসছে পর্ব ৩০ আর ৩৩-এ।

৮ · দৈনন্দিন জীবনের কোড — বারকোড, QR আর Morse

বারকোড আর check digit

সুপারশপে ক্যাশিয়ার পণ্যের গায়ে স্ক্যানার ধরলেই দাম উঠে আসে। পণ্যের গায়ের কালো-সাদা দাগগুলো একটি সংখ্যার কোড — সবচেয়ে প্রচলিত EAN-13, অর্থাৎ ১৩ অঙ্কের সংখ্যা। শুরুর কয়েকটি অঙ্ক বলে পণ্যটি কোন দেশের নিবন্ধন সংস্থায় নথিভুক্ত (বানানো কোথায়, তা নয়), মাঝের অঙ্কগুলো কোম্পানি আর পণ্য, আর শেষ অঙ্কটি একটি check digit — বাকি ১২টি অঙ্ক থেকে হিসাব করা। স্ক্যানার একটি দাগ ভুল পড়লে হিসাব মেলে না, আর মেশিন “বিপ” না দিয়ে আবার স্ক্যান করতে বলে। বইয়ের ISBN-13-ও একই নিয়মের — শুরু 978 বা 979 দিয়ে, আর বাংলাদেশের বইয়ে এরপর সাধারণত 984.

উদাহরণ: একটি কাল্পনিক বইয়ের প্রথম ১২ অঙ্ক 978984801234. check digit কত? নিয়ম: বাঁ দিক থেকে বিজোড় ঘরের অঙ্ককে ১ দিয়ে, জোড় ঘরের অঙ্ককে ৩ দিয়ে গুণ করে যোগ করুন; তারপর পরের দশকের গুণিতক পর্যন্ত যত বাকি, সেটাই check digit.

অঙ্ক   :  9  7  8  9  8  4  8  0  1  2  3  4
ওজন    :  1  3  1  3  1  3  1  3  1  3  1  3
গুণফল  :  9 21  8 27  8 12  8  0  1  6  3 12
যোগফল  = 115
115-এর পরের দশকের গুণিতক 120 → 120 − 115 = 5
∴ check digit = 5, পুরো নম্বর 9789848012345

যোগফল নিজেই ১০-এর গুণিতক হলে check digit 0. এই নিয়ম যেকোনো একটি অঙ্কের ভুল ধরে, আর পাশাপাশি দুটি অঙ্ক অদলবদলের বেশিরভাগ ভুলও।

QR কোড — অর্ধেক ছেঁড়া হলেও পড়া যায়

QR code ১৯৯৪ সালে জাপানের Denso Wave কোম্পানি বানায় — গাড়ির যন্ত্রাংশ দ্রুত চেনার জন্য। আজ bKash-Nagad-এ QR payment, রেস্টুরেন্টের মেনু, ওয়েবসাইটের লিংক — সবখানে। এর বড় শক্তি error correction: ভেতরে Reed–Solomon নামের একটি সংশোধনী কোড আছে। কতটা নষ্ট অংশ সামলাতে পারবে, তার চারটি স্তর:

স্তরমোটামুটি কতটা নষ্ট হলেও পড়া যায়কখন বেছে নেওয়া হয়
L (Low)প্রায় ৭%পরিষ্কার পর্দা, বেশি ডেটা রাখতে হবে
M (Medium)প্রায় ১৫%সাধারণ ব্যবহার
Q (Quartile)প্রায় ২৫%কারখানা, বাইরে লাগানো স্টিকার
H (High)প্রায় ৩০%মাঝে লোগো বসানো, ময়লা বা ছেঁড়ার ঝুঁকি

অনেক QR কোডের মাঝখানে কোম্পানির লোগো থাকে, তবু পড়া যায় — কারণ লোগোটি যতটুকু ঢেকেছে, error correction সেটুকু পুনরুদ্ধার করে নেয়। দাম: যত উঁচু স্তর, তত বেশি বাড়তি বিট, তাই একই আকারে কম ডেটা ধরে।

Morse code — ছোট অক্ষরে ছোট সংকেত

Morse code-এ প্রতিটি অক্ষরের সংকেতের দৈর্ঘ্য সমান নয়। ইংরেজিতে সবচেয়ে বেশি ব্যবহৃত অক্ষর E — তার সংকেত মাত্র একটি ডট (·); T একটি ড্যাশ (–)। আর কম ব্যবহৃত Q হলো – – · –. ফলে গড়ে একটি বার্তা পাঠাতে কম সংকেত লাগে। এটাই variable-length কোড — আর এই একই বুদ্ধি থেকে পরে এসেছে ডেটা compression: ZIP ফাইল বা ছবি ছোট করার কৌশলে বেশি ঘনঘন আসা জিনিসকে ছোট কোড দেওয়া হয় (পর্ব ২৮-এ compression দেখবেন)। বিপদের সংকেত SOS হলো · · · – – – · · · — সহজে চেনা যায় বলেই বেছে নেওয়া।

পরীক্ষা ও ইন্টারভিউতে — এ ধরনের প্রশ্ন প্রায়ই আসে:

  • ASCII-এর পূর্ণরূপ কী, কয় বিটের? American Standard Code for Information Interchange; মূল ASCII ৭ বিটের, ১২৮টি অক্ষর (৮ বিটের extended রূপে ২৫৬টি)। A = 65, a = 97, '0' = 48.
  • (59)10-এর BCD কী? 0101 1001 — প্রতিটি অঙ্ক আলাদা ৪ বিটে। BCD-র পূর্ণরূপ Binary Coded Decimal; 1010–1111 অবৈধ।
  • প্যারিটি বিটের কাজ কী? ডেটা পাঠানোর সময় একটি বিটের ভুল শনাক্ত করা। এটি ভুল ঠিক করতে পারে না, আর দুটি বিট একসাথে উল্টালে ধরতে পারে না।
  • Unicode কত বিটের কোড? পাঠ্যবই আর অনেক পরীক্ষায় উত্তর “১৬ বিট, ৬৫,৫৩৬টি অক্ষর” — Unicode-এর প্রথম সংস্করণ (১৯৯১) সত্যিই ১৬ বিটের নকশা ছিল। আধুনিক Unicode-এর কোড-স্পেস U+10FFFF পর্যন্ত, অর্থাৎ ২১ বিট লাগে (১১,১৪,১১২টি ঘর)। লিখিত পরীক্ষায় দুটোই উল্লেখ করলে উত্তর নিখুঁত হয়; MCQ-তে অপশন দেখে বেছে নিন।
  • কোন কোডে পরপর দুটি মানে একটি বিট বদলায়? Gray code (unweighted). আর self-complementing কোড? Excess-3.

৯ · AI-এর যুগে কোড-টেবিল — দ্রুত, কিন্তু যাচাই করে

AI চ্যাটবট এক সেকেন্ডে পুরো ASCII টেবিল, BCD-র তালিকা বা Gray code-এর ছক বানিয়ে দিতে পারে। পরীক্ষার প্রস্তুতিতে এটা দারুণ সাহায্য। কিন্তু এই বিষয়ে AI কিছু নির্দিষ্ট ভুল প্রায়ই করে — কারণ সে হিসাব করে না, অনুমান করে লেখে (পর্ব ১৩-এ “AI hallucination” দেখেছেন)। সংখ্যার কোডে একটি অঙ্কের ভুল মানেই পুরো উত্তর ভুল।

AI যে ভুল করতে পারেকীভাবে ধরবেন
ASCII মান আর Unicode code point গুলিয়ে ফেলা, বা দশমিক আর hex মিশিয়ে লেখা (যেমন “A = 41” লিখে দশমিক বোঝানো)প্রতিটি সংখ্যার পাশে ভিত্তি (১০ না ১৬) আছে কি না দেখুন; A = 65 = hex 41 মনে রাখুন
বাংলা অক্ষর UTF-8-এ ২ বাইট বলা, বা ইমোজি ৩ বাইট বলাবাংলা ৩, বেশিরভাগ ইমোজি ৪ — উপরের এনকোডার চালিয়ে মিলিয়ে নিন
“Unicode = UTF-8” বা “UTF-16 সবসময় ২ বাইট” বলাCharacter set বনাম encoding আলাদা; UTF-16 BMP-র বাইরে ৪ বাইট
BCD আর binary গুলিয়ে ফেলা, অবৈধ BCD (1010+) উত্তরে রেখে দেওয়াপ্রতিটি ৪-বিটের দল ৯-এর বেশি কি না দেখুন
Gray রূপান্তরে binary-র বদলে Gray-এর বিট দিয়ে XOR করাউল্টো পথে (Gray → binary) রূপান্তর করে আগের সংখ্যা ফেরে কি না দেখুন

AI-কে টেবিল বানাতে বললে সাথে যাচাইয়ের পথও চেয়ে নিন। নিচের প্রম্পটে খেয়াল করুন — হিসাব দেখাতে বলা হয়েছে, আর অনিশ্চিত হলে স্বীকার করতে বলা হয়েছে:

আমি HSC ICT-র সংখ্যা পদ্ধতি ও কোড অধ্যায় পড়ছি। নিচের প্রতিটির জন্য একটি টেবিল বানাও: অক্ষর "B", "b", "7" আর "আ"। কলাম: অক্ষর | ASCII দশমিক (প্রযোজ্য হলে) | Unicode code point (U+ রূপে) | ৮ বিট binary (প্রযোজ্য হলে) | UTF-8 বাইট (hex) | UTF-8 বাইট সংখ্যা। নিয়ম: ১. প্রতিটি সংখ্যা দশমিক না hex, স্পষ্ট লেখো। ২. একটি সারির binary কীভাবে পেলে, হিসাবটি দেখাও। ৩. কোনো মান নিয়ে নিশ্চিত না হলে "নিশ্চিত নই" লেখো, অনুমান কোরো না। শেষে আমাকে বলো কোন অনলাইন টুল বা প্রোগ্রাম দিয়ে আমি নিজে এগুলো মিলিয়ে নিতে পারি।

AI-এর দেওয়া কোড-টেবিল হাতে পেলে — যাচাইয়ের চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন। কোডগুলোর পেছনের মানুষ আর সিদ্ধান্তগুলো জানলে মুখস্থ নয়, বোঝা হয়।

প্র ০১Morse code কি পৃথিবীর প্রথম “ডিজিটাল” কোড? এটি কি সত্যিই binary?

১৮৩০ আর ১৮৪০-এর দশকে আমেরিকায় Samuel Morse আর তাঁর সহকর্মী Alfred Vail বৈদ্যুতিক টেলিগ্রাফ আর তার কোড তৈরি করেন। ১৮৪৪ সালে ওয়াশিংটন থেকে বাল্টিমোরে তারের মাধ্যমে বিখ্যাত বার্তাটি যায় — “What hath God wrought”. প্রথমবার মানুষ দূরে বার্তা পাঠাল ঘোড়া বা জাহাজের চেয়ে লাখো গুণ দ্রুত। এই অর্থে Morse code ছিল প্রথম ব্যাপকভাবে ব্যবহৃত বৈদ্যুতিক ডিজিটাল কোড — বার্তা গেছে আলাদা আলাদা সংকেতে, অবিচ্ছিন্ন তরঙ্গে নয়।

কিন্তু “প্রথম” দাবিটি সাবধানে করতে হয়। সতেরো শতকে দার্শনিক Francis Bacon একটি গোপন লিখন-পদ্ধতি বর্ণনা করেন, যেখানে প্রতিটি অক্ষর পাঁচটি “a” বা “b”-এর একটি সারি — আসলে একটি ৫-বিটের binary কোড! আর ১৮২০-এর দশকে Louis Braille অন্ধদের জন্য ছয়টি বিন্দুর “আছে/নেই” দিয়ে অক্ষর বানান — এটাও ৬ বিটের কোড।

আর Morse কি সত্যিই binary? পুরোপুরি নয়। এতে ডট আর ড্যাশ ছাড়াও নীরবতার দৈর্ঘ্য অর্থ বহন করে — অক্ষরের মাঝের ফাঁক, শব্দের মাঝের ফাঁক আলাদা। তাই কেউ কেউ একে তিন বা চার প্রতীকের কোড বলেন। আর এর অক্ষরগুলোর দৈর্ঘ্য সমান নয়। প্রচলিত গল্প হলো, Vail ছাপাখানায় গিয়ে দেখেছিলেন কোন অক্ষরের সিসার টাইপ বেশি মজুত থাকে — অর্থাৎ কোনটি বেশি ব্যবহৃত — আর সেগুলোকে ছোট সংকেত দিয়েছিলেন। ঠিক এই চিন্তাকেই ১৯৫২ সালে David Huffman গাণিতিকভাবে নিখুঁত করেন — Huffman coding আজও ZIP আর JPEG-এর ভেতরে কাজ করে।

আরেকটি শিক্ষা: Morse কোডে কোনো ভুল-ধরার ব্যবস্থা ছিল না। ভুল ধরত মানুষ — অভিজ্ঞ অপারেটর অর্থহীন শব্দ দেখে বুঝতেন কিছু গোলমাল হয়েছে। কম্পিউটারে সেই কাজটি করতে হয় প্যারিটি আর CRC দিয়ে।

মূল উপলব্ধি: “ডিজিটাল” মানে বিদ্যুৎ নয়, মানে আলাদা আলাদা নির্দিষ্ট প্রতীক। আর কোড নকশার দুটি মূল প্রশ্ন — কত ছোট করা যায় (compression) আর ভুল কীভাবে ধরা যায় (error detection) — Morse-এর যুগ থেকেই চলছে।

প্র ০২ASCII কেন ৭ বিটের হলো, ৮ বিটের নয়? ১৯৬৩ সালের সেই সিদ্ধান্ত আজও কীভাবে প্রভাব ফেলে?

১৯৬০-এর দশকের শুরুতে আমেরিকায় প্রায় প্রতিটি কম্পিউটার আর টেলিপ্রিন্টার কোম্পানির নিজস্ব অক্ষর-কোড ছিল — এক যন্ত্রের লেখা আরেক যন্ত্র পড়তে পারত না। এই বিশৃঙ্খলা দূর করতে American Standards Association-এর একটি কমিটি কাজ শুরু করে; IBM-এর Bob Bemer-সহ অনেকে এতে বড় ভূমিকা রাখেন (Esc অক্ষরটির ধারণা তাঁর বলে ধরা হয়)। ১৯৬৩ সালে ASCII-র প্রথম সংস্করণ প্রকাশ হয় — মজার ব্যাপার, তাতে ছোট হাতের অক্ষরই ছিল না! সেগুলো যোগ হয় ১৯৬৭ সালের সংশোধনে।

৭ বনাম ৮ বিটের বিতর্ক: সে সময় প্রতিটি বিট পাঠাতে টাকা লাগত — টেলিফোন লাইন আর কাগজের টেপ দুটোই দামি। ৬ বিটে (৬৪টি ঘর) বড়-ছোট হাতের অক্ষর আর control character ধরে না; ৮ বিট মনে হয়েছিল অপচয়। তাই ৭ বিট — ১২৮টি ঘর। আর ৮ বিটের যন্ত্রে বাড়তি বিটটি প্রায়ই ব্যবহার হতো প্যারিটি বিট হিসেবে — ঠিক যা আপনি অংশ ৬-এ দেখলেন।

অন্যদিকে IBM ১৯৬৪ সালে System/360 আনল ৮ বিটের byte আর নিজস্ব EBCDIC নিয়ে। ৮ বিটের byte পরে সারা পৃথিবীর মান হয়ে গেল, কিন্তু কোড হিসেবে জিতল ASCII — ১৯৬৮ সালে মার্কিন সরকার তাদের কম্পিউটারে ASCII সমর্থন বাধ্যতামূলক করে, আর পরে ব্যক্তিগত কম্পিউটার ও ইন্টারনেট ASCII-র ওপরেই গড়ে ওঠে।

আজও প্রভাব: ৭ বিটের ASCII আর ৮ বিটের byte-এর মাঝের ফাঁকা বিটটি পরে হয়ে গেল “যার যা খুশি” বসানোর জায়গা — extended ASCII আর শত শত code page, যার এক রূপ বাংলার বিজয়-যুগের ফন্ট। পুরোনো ইমেইল ব্যবস্থা অনেক দিন ৮ নম্বর বিট নষ্ট করে ফেলত, তাই ছবি বা বাংলা পাঠাতে বিশেষ রূপান্তর লাগত। আর সবচেয়ে বড় প্রভাব: UTF-8 ইচ্ছা করেই এমনভাবে বানানো যে প্রথম ১২৮টি ঘর হুবহু ASCII — ফলে ষাট বছর আগের সিদ্ধান্ত আজও প্রতিটি ওয়েবপেজের ভেতরে বেঁচে আছে।

মূল উপলব্ধি: মান (standard) নির্ধারণ হয় সেই সময়ের খরচ আর সীমাবদ্ধতা দেখে, কিন্তু টিকে থাকে কয়েক প্রজন্ম। আজকের নকশা ভবিষ্যতের “ঐতিহাসিক বোঝা” হতে পারে — তাই ভালো মান পেছনের দিকে সামঞ্জস্য রেখে সামনে বাড়ার পথ খোলা রাখে।

প্র ০৩শত শত code page বাদ দিয়ে Unicode কীভাবে জিতল? আর UTF-8 নাকি একটি রেস্তোরাঁর কাগজের ম্যাটে নকশা করা হয়েছিল — গল্পটি কী?

১৯৮০-এর দশকে পৃথিবীতে শত শত code page — প্রতিটি দেশ, প্রতিটি কোম্পানির আলাদা। জাপানি লেখার জন্য একাধিক প্রতিযোগী মান, রুশের জন্য কয়েকটি, ভারতে ISCII, বাংলাদেশে বিজয়-ধরনের ফন্ট-কৌশল। একটি ফাইলে দুই ভাষা মেশানো প্রায় অসম্ভব ছিল। ১৯৮৭–৮৮ সালে Xerox-এর Joe Becker আর Apple-এর Lee Collins ও Mark Davis প্রস্তাব করেন: পৃথিবীর সব অক্ষরের জন্য একটিই তালিকা। ১৯৯১ সালে Unicode Consortium গঠিত হয়, আর একই বছর বের হয় Unicode 1.0.

শুরুর নকশা ছিল ১৬ বিট — ৬৫,৫৩৬টি ঘর, ভাবা হয়েছিল “যথেষ্ট”। কিন্তু চীনা-জাপানি-কোরিয়ান অক্ষর, ঐতিহাসিক লিপি আর পরে ইমোজি মিলিয়ে দেখা গেল জায়গা কম। ১৯৯৬ সালের Unicode 2.0-তে কোড-স্পেস বাড়িয়ে ১৭টি plane করা হয় — সেই থেকে U+10FFFF পর্যন্ত। এজন্যই পাঠ্যবইয়ে “১৬ বিট” লেখা থাকে, অথচ আজকের সত্য অন্য।

UTF-8-এর গল্প: কিন্তু ১৬ বিটের Unicode-এর একটি বড় সমস্যা ছিল — পুরোনো সব ASCII প্রোগ্রাম আর ফাইল ভেঙে যেত, কারণ ইংরেজি অক্ষরও তখন ২ বাইট, আর তার একটি বাইট শূন্য, যা C প্রোগ্রামে “লেখা শেষ” বোঝায়। ১৯৯২ সালের সেপ্টেম্বরে Bell Labs-এর Ken Thompson আর Rob Pike নিউ জার্সির একটি রেস্তোরাঁয় রাতের খাবার খেতে খেতে টেবিলের কাগজের ম্যাটে একটি নতুন নকশা আঁকেন। শর্ত ছিল: ASCII হুবহু ১ বাইটে থাকবে; অন্য অক্ষরের কোনো বাইট ASCII-র মতো দেখাবে না; আর মাঝখান থেকে পড়লেও অক্ষরের শুরু চেনা যাবে। কয়েক দিনের মধ্যে তাঁরা এটি তাঁদের Plan 9 অপারেটিং সিস্টেমে চালু করেন।

এই “পেছনের দিকে সামঞ্জস্য” গুণটিই UTF-8-কে জিতিয়েছে। পুরোনো সফটওয়্যার বদল ছাড়াই চলল, আর নতুন সফটওয়্যার পেল সব ভাষা। আজ প্রায় সব ওয়েবপেজ UTF-8-এ। বাংলার জন্যও এটি বিপ্লব — অভ্রের মতো Unicode-ভিত্তিক কি-বোর্ড আর UTF-8 মিলেই আজ ফেসবুক, সরকারি ওয়েবসাইট আর সার্চে বাংলা লেখা খোঁজা যায়।

মূল উপলব্ধি: প্রযুক্তি জেতে শুধু শ্রেষ্ঠ হয়ে নয়, পুরোনো জগতের সাথে মসৃণ সেতু বানিয়ে। Unicode সঠিক তালিকা দিয়েছে, আর UTF-8 দিয়েছে সেই তালিকায় পৌঁছানোর ব্যথাহীন পথ।

প্র ০৪Gray code-এর নাম Frank Gray-এর নামে কেন, আর ৭০ বছর পরেও এটি কোথায় কোথায় কাজ করছে?

Frank Gray ছিলেন আমেরিকার Bell Labs-এর একজন গবেষক। ১৯৪৭ সালে তিনি একটি পেটেন্টের আবেদন করেন, যা ১৯৫৩ সালে মঞ্জুর হয় — বিষয় ছিল “pulse code communication”, অর্থাৎ শব্দের মতো অবিচ্ছিন্ন সংকেতকে ডিজিটাল সংখ্যায় বদলানো। সে যুগের vacuum tube-ভিত্তিক যন্ত্রে মাপার মুহূর্তে কয়েকটি বিট একসাথে বদলালে বড় ভুল হতো। Gray দেখালেন, সংখ্যাগুলোকে এমন ক্রমে সাজানো যায় যাতে পাশাপাশি দুটির মধ্যে মাত্র একটি বিট আলাদা। তিনি এর নাম দেন reflected binary code — কারণ নকশাটি আয়নার প্রতিফলনের মতো: ১ বিটের তালিকা উল্টো করে নিচে বসিয়ে, ওপরের অর্ধেকের সামনে 0 আর নিচের অর্ধেকের সামনে 1 দিলেই ২ বিটের তালিকা।

মজার ব্যাপার, ধারণাটি পুরোপুরি নতুন ছিল না। ১৮৭০-এর দশকে Émile Baudot তাঁর টেলিগ্রাফ যন্ত্রে এ ধরনের ক্রম ব্যবহার করেছিলেন, আর “চাইনিজ রিং” নামের প্রাচীন ধাঁধার সমাধানেও একই নকশা লুকানো। কিন্তু পেটেন্ট আর ব্যাপক প্রচারের কারণে নামটি Gray-এর।

আজ কোথায়?

  • Rotary encoder: শিল্প-কারখানার রোবট, CNC মেশিন, গাড়ির স্টিয়ারিং কোণ — যেখানে ঘুরন্ত অংশের অবস্থান নিরাপদে পড়তে হয়।
  • Karnaugh map: লজিক সার্কিট সরল করার ছকে সারি-কলাম Gray ক্রমে সাজানো, যাতে পাশের ঘরগুলো এক বিটে আলাদা থাকে।
  • মোবাইল আর Wi-Fi সংকেত: ডিজিটাল modulation-এ পাশাপাশি সংকেত-বিন্দুগুলোকে Gray ক্রমে নম্বর দেওয়া হয়। নয়েজে একটি বিন্দু পাশেরটির সাথে গুলিয়ে গেলে মাত্র একটি বিট ভুল হয় — যা error correction সহজে ঠিক করে।
  • চিপের ভেতরে: দুটি ভিন্ন ঘড়ির গতিতে চলা অংশের মধ্যে কাউন্টারের মান পাঠাতে Gray code নিরাপদ, কারণ মাঝপথে পড়লেও দূরের ভুল মান আসে না।

মূল উপলব্ধি: সবচেয়ে “স্বাভাবিক” উপস্থাপন (সাধারণ binary) সব কাজে সেরা নয়। বাস্তব যন্ত্রের দুর্বলতা — এখানে একসাথে সব সেন্সর না বদলানো — মাথায় রেখে কোড বানালে সমস্যা গোড়াতেই দূর হয়।

প্র ০৫সপ্তাহান্তে কম্পিউটারের ভুলে বিরক্ত এক গবেষক কীভাবে Hamming code আবিষ্কার করলেন?

১৯৪০-এর দশকের শেষ দিক। Bell Labs-এ Richard Hamming কাজ করতেন relay দিয়ে বানানো একটি বিশাল কম্পিউটারে। প্রোগ্রাম আর ডেটা ঢুকত punched card বা কাগজের টেপে, যা মাঝে মাঝে ভুল পড়া হতো। যন্ত্রটির প্যারিটির মতো ভুল-ধরার ব্যবস্থা ছিল — ভুল ধরা পড়লে অপারেটর থাকলে তিনি ঠিক করে আবার চালাতেন। কিন্তু সপ্তাহান্তে কোনো অপারেটর থাকতেন না। তখন যন্ত্রটি ভুল পেলে পুরো কাজ বাতিল করে পরের কাজে চলে যেত।

Hamming শুক্রবার বড় একটি হিসাব জমা দিয়ে সোমবার এসে দেখতেন — কাজটি বাতিল, কিছুই হয়নি। পরপর দুই সপ্তাহ এমন হওয়ার পর তাঁর বিখ্যাত বিরক্তি: “যন্ত্রটি যদি বুঝতেই পারে যে ভুল হয়েছে, তাহলে ভুলটা কোথায় সেটা বের করে ঠিক করতে পারে না কেন?”

এই প্রশ্ন থেকেই জন্ম নিল Hamming code. তিনি বুঝলেন, একটি প্যারিটি বিট শুধু “হ্যাঁ/না” বলে; কিন্তু কয়েকটি প্যারিটি বিট যদি ভিন্ন ভিন্ন, পরস্পর-জড়ানো ঘরের দল পাহারা দেয়, তাহলে কোন কোন পাহারাদার “ভুল” বলছে — সেই নকশাটাই ভুল ঘরের ঠিকানা। ১৯৫০ সালে তাঁর গবেষণাপত্র “Error Detecting and Error Correcting Codes” প্রকাশিত হয়। সেখানে তিনি “Hamming distance”-এর ধারণাও দেন — দুটি কোডে কয়টি বিট আলাদা; বৈধ কোডগুলো পরস্পর থেকে যত দূরে, তত বেশি ভুল ধরা ও ঠিক করা যায়। ১৯৬৮ সালে তিনি Turing Award পান।

একই সময়ে, একই Bell Labs-এ Claude Shannon ১৯৪৮ সালে দেখিয়েছিলেন যে নয়েজভরা পথেও প্রায় নির্ভুল যোগাযোগ তাত্ত্বিকভাবে সম্ভব। Hamming দিলেন তার প্রথম ব্যবহারিক উপায়। আজ এর উত্তরসূরিরা সবখানে: সার্ভারের ECC RAM, SSD-র ভেতরের শক্তিশালী সংশোধনী কোড, CD-DVD আর QR কোডের Reed–Solomon, মহাকাশযান থেকে পৃথিবীতে ছবি পাঠানো, এমনকি 4G-5G মোবাইল সংকেত।

মূল উপলব্ধি: বড় আবিষ্কার প্রায়ই আসে একটি বাস্তব বিরক্তি থেকে, আর সঠিক প্রশ্ন থেকে — “শুধু ধরা নয়, ঠিক করা যায় না কেন?” আর এর দাম আছে: ঠিক করার ক্ষমতার জন্য বেশি বাড়তি বিট লাগে। কতটা নিরাপত্তা আর কতটা খরচ — এই হিসাবই error-correcting code নকশার মূল কথা।

অনুশীলন

খাতা-কলম নিন। প্রতিটি হিসাব আগে নিজে করুন, তারপর উত্তর মিলিয়ে দেখুন।

  1. “BD” লিখুন ASCII-তে: B আর D-এর ASCII দশমিক মান, ৭ বিটের binary আর even parity বিটসহ ৮ বিট রূপ লিখুন। (সূত্র: A = 65.)

    B = 66 = 64 + 2 → 1000010. এতে 1 আছে ২টি (জোড়), তাই even parity বিট 0 → 01000010.

    D = 68 = 64 + 4 → 1000100. এখানেও 1 দুটি, প্যারিটি বিট 0 → 01000100.

    ছোট হাতের b চাইলে শুধু ৩২-এর বিটটি 1 করুন: 1100010 = 98.

  2. BCD আর excess-3: (ক) (৪৭)১০-এর BCD, excess-3 আর বিশুদ্ধ binary রূপ লিখুন। (খ) 0110 1011 কি বৈধ BCD সংখ্যা?

    (ক) BCD: 4 → 0100, 7 → 0111, তাই 0100 0111. Excess-3: 4 + 3 = 7 → 0111, 7 + 3 = 10 → 1010, তাই 0111 1010. বিশুদ্ধ binary: ৪৭ = 32 + 8 + 4 + 2 + 1 → 101111.

    (খ) না। দ্বিতীয় দল 1011 = ১১, যা ৯-এর বেশি — BCD-তে অবৈধ। (খেয়াল করুন, excess-3-এ 1010 বৈধ, কারণ সেখানে কোড চলে 0011 থেকে 1100 পর্যন্ত।)

  3. প্রাপকের ভূমিকায়: Odd parity চুক্তিতে আপনি তিনটি ৮ বিটের দল পেলেন: (ক) 10110100 (খ) 01110011 (গ) 11111111. কোনগুলো গ্রহণ করবেন, কোনগুলো আবার চাইবেন?

    (ক) 1 আছে ৪টি — জোড়, অথচ চুক্তি বিজোড়। ভুল, আবার পাঠাতে বলুন।

    (খ) 1 আছে ৫টি — বিজোড়। গ্রহণযোগ্য। তবে মনে রাখুন, এর মানে “ভুল ধরা পড়েনি”, “নিশ্চিত নির্ভুল” নয় — দুটি বিট উল্টালে প্যারিটি টের পায় না।

    (গ) 1 আছে ৮টি — জোড়। ভুল। এভাবে সব-1 বা সব-0 আসা প্রায়ই তার বা সংযোগের সমস্যার লক্ষণ।

  4. বারকোড গোয়েন্দা: (ক) একটি পণ্যের EAN-13-এর প্রথম ১২ অঙ্ক 590123412345. check digit কত? (খ) বাসায় যেকোনো একটি পণ্যের প্যাকেটের বারকোডের নিচের ১৩ অঙ্ক নিয়ে একই হিসাব করে দেখুন শেষ অঙ্কটি মেলে কি না।

    (ক) ওজন ১, ৩, ১, ৩… দিয়ে: 5 + 27 + 0 + 3 + 2 + 9 + 4 + 3 + 2 + 9 + 4 + 15 = 83. পরের দশকের গুণিতক 90; 90 − 83 = 7. পুরো নম্বর 5901234123457.

    (খ) সঠিকভাবে হিসাব করলে প্রতিটি আসল পণ্যে মিলবে — না মিললে প্রায় নিশ্চিত আপনি কোনো অঙ্ক ভুল পড়েছেন বা ওজন (১ আর ৩) উল্টো বসিয়েছেন। যেটা মিলল, সেটাই প্রমাণ যে check digit সত্যিই কাজ করে। চাইলে একটি অঙ্ক ইচ্ছা করে বদলে দেখুন — যোগফল আর মিলবে না।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি ইংরেজি অক্ষর তারে পাঠিয়ে প্রাপকের কাছে যাচাই হওয়া পর্যন্ত ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. ⌨️ কি-বোর্ডে অক্ষরটি চাপা
  2. 🔢 ASCII টেবিল থেকে অক্ষরের নম্বর নেওয়া
  3. 0️⃣ নম্বরটিকে ৭ বিটের binary-তে লেখা
  4. ➕ 1 গুনে প্যারিটি বিট জুড়ে ৮ বিট বানানো
  5. 📡 বিটগুলো তারে পাঠানো
  6. ✅ প্রাপকের 1 গুনে প্যারিটি যাচাই করা

দশমিক সংখ্যা ৫৯-এর BCD (8421) রূপ কোনটি?

  • 111011
  • 0101 1001
  • 0101 1010
  • 1000 1100

মূল (standard) ASCII কোড কত বিটের, আর এতে কয়টি অক্ষর-চিহ্ন রাখা যায়?

  • ৬ বিট, ৬৪টি
  • ৮ বিট, ২৫৬টি
  • ৭ বিট, ১২৮টি
  • ১৬ বিট, ৬৫,৫৩৬টি

Even parity ব্যবহার করে ৭ বিটের ডেটা 1101001 পাঠানো হবে। প্যারিটি বিটটি কত হবে?

  • 0
  • 1
  • 10
  • ডেটা না জেনে বলা যায় না

Gray code-এর প্রধান বৈশিষ্ট্য কোনটি?

  • প্রতিটি ঘরের নির্দিষ্ট ওজন 8, 4, 2, 1
  • প্রতিটি দশমিক অঙ্কের সাথে ৩ যোগ করে লেখা হয়
  • এটি পাঠানোর পথে ভুল ধরতে পারে
  • পরপর দুটি মানের মধ্যে মাত্র একটি বিট বদলায়

বাংলা অক্ষর “আ” (U+0986) UTF-8 encoding-এ কত বাইট জায়গা নেয়?

  • ১ বাইট
  • ২ বাইট
  • ৩ বাইট
  • ৪ বাইট

নিচের কোনটি ডেটার ভুল শুধু ধরেই না, একটি বিটের ভুল নিজে ঠিকও করতে পারে?

  • Parity bit
  • Hamming code
  • Checksum
  • BCD

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. কোড = চুক্তির টেবিল। একই বিট ভিন্ন কোডে ভিন্ন অর্থ; লেখা আর পড়ায় একই কোড না মানলে ভুল সংখ্যা বা হিজিবিজি লেখা।
  2. BCD প্রতিটি দশমিক অঙ্ক ৪ বিটে (59 = 0101 1001, 1010–1111 অবৈধ); excess-3 = অঙ্ক + ৩; Gray-এ পরপর মানে একটি বিট বদলায়।
  3. ASCII ৭ বিট, ১২৮টি (A = 65, a = 97, পার্থক্য ৩২); EBCDIC IBM-এর ৮ বিট; Unicode সব লিপির তালিকা, U+10FFFF পর্যন্ত।
  4. Character set ≠ encoding: UTF-8 (১–৪ বাইট, ASCII-compatible), UTF-16 (২ বা ৪), UTF-32 (সবসময় ৪)। ভুল encoding-এ পড়লে mojibake.
  5. প্যারিটি ১ বিটের ভুল ধরে, ২ বিটের নয়, ঠিকও করে না; checksum আর CRC বেশি ধরে; Hamming ঠিকও করে। বারকোড আর QR-এও এই পাহারাদার আছে।

পরের পর্বে: বিট দিয়ে সংখ্যা আর অক্ষর রাখা শিখলেন; XOR-এর মতো একটি বিট-অপারেশনও দেখলেন। এবার সেই সত্য-মিথ্যার গণিত — বুলিয়ান অ্যালজেব্রা আর ডি মরগানের উপপাদ্য, যা দিয়ে কম্পিউটারের প্রতিটি সার্কিট নকশা হয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান