- ASCII को 7-बिट में ऊपरी 2 बिट्स (group) और निचले 5 बिट्स (value) में बाँटकर 4-कॉलम टेबल में रखने से control characters और printable characters के बीच का संबंध तुरंत दिख जाता है
CTRL key दबाने पर इनपुट character के ऊपरी बिट्स 0 हो जाते हैं, जिससे वही निचले 5 बिट्स साझा करने वाला control character बनता है
- उदाहरण के लिए
[(10 11011) पर CTRL दबाने से ESC(00 11011) बनता है, और इसे bitwise AND operation से समझाया जा सकता है
^J newline, ^H backspace, और ^I tab क्यों हैं, यह भी इसी संरचना से समझ आता है; Windows text files में दिखने वाला ^M(CR) भी इसी सिद्धांत पर आधारित है
- सामान्य ASCII tables इस pattern को छिपा देती हैं, लेकिन हर 32 characters पर कॉलम बाँटने से design intent साफ़ दिखता है
4-कॉलम ASCII टेबल की खोज
- Hacker News user soneil ने ASCII table का 32-32 के समूह में 4-कॉलम layout वाला version पोस्ट किया
- इस layout से तुरंत समझ आता है कि uppercase और lowercase का अंतर सिर्फ एक bit का है, और alphabet
40h + क्रम मान पर है (lowercase के लिए 60h)
^\[ क्यों ESC है, यह भी इस table में तुरंत देखा जा सकता है
ASCII की 7-बिट encoding संरचना
- ASCII एक 7-बिट encoding है; पहले 2 bits 4 groups दिखाते हैं और आख़िरी 5 bits 32 values व्यक्त करते हैं
- group
00: control characters (NUL, SOH, STX, ESC आदि)
- group
01: special characters और digits (Spc, !, ", # आदि)
- group
10: uppercase alphabet (@, A, B, C आदि)
- group
11: lowercase alphabet (`, a, b, c आदि)
- एक ही row में मौजूद characters के निचले 5 bits समान होते हैं, केवल group bits अलग होते हैं
4-कॉलम ASCII टेबल
| बिट |
00 (control) |
01 (special/number) |
10 (uppercase) |
11 (lowercase) |
| 00000 |
NUL |
Spc |
@ |
` |
| 00001 |
SOH |
! |
A |
a |
| 00010 |
STX |
" |
B |
b |
| 00011 |
ETX |
# |
C |
c |
| 00100 |
EOT |
$ |
D |
d |
| 00101 |
ENQ |
% |
E |
e |
| 00110 |
ACK |
& |
F |
f |
| 00111 |
BEL |
' |
G |
g |
| 01000 |
BS |
( |
H |
h |
| 01001 |
TAB |
) |
I |
i |
| 01010 |
LF |
* |
J |
j |
| 01011 |
VT |
+ |
K |
k |
| 01100 |
FF |
, |
L |
l |
| 01101 |
CR |
- |
M |
m |
| 01110 |
SO |
. |
N |
n |
| 01111 |
SI |
/ |
O |
o |
| 10000 |
DLE |
0 |
P |
p |
| 10001 |
DC1 |
1 |
Q |
q |
| 10010 |
DC2 |
2 |
R |
r |
| 10011 |
DC3 |
3 |
S |
s |
| 10100 |
DC4 |
4 |
T |
t |
| 10101 |
NAK |
5 |
U |
u |
| 10110 |
SYN |
6 |
V |
v |
| 10111 |
ETB |
7 |
W |
w |
| 11000 |
CAN |
8 |
X |
x |
| 11001 |
EM |
9 |
Y |
y |
| 11010 |
SUB |
: |
Z |
z |
| 11011 |
ESC |
; |
[ |
{ |
| 11100 |
FS |
< |
\ |
| |
| 11101 |
GS |
= |
] |
} |
| 11110 |
RS |
> |
^ |
~ |
| 11111 |
US |
? |
_ |
DEL |
CTRL key कैसे काम करती है
CTRL key दबाने पर इनपुट character के ऊपरी bits सभी 0 पर सेट हो जाते हैं, जिससे वह control character group (00) में चला जाता है
- इसे bitwise AND operation के रूप में लिखा जा सकता है:
10 11011([) AND 00 11111(CTRL) = 00 11011(ESC)
- इसलिए
CTRL+[ से ESC बनना कोई मनमाना mapping नहीं, बल्कि bit operation पर आधारित design है
व्यावहारिक उदाहरण
^J(CTRL+J) LF (newline) है, ^H(CTRL+H) BS (backspace) है, और ^I(CTRL+I) TAB है
- Windows text file को
cat -A से देखने पर ^M दिखता है, क्योंकि Windows line ending CR+LF format का उपयोग करती है
- vim users का terminal में ESC की जगह
CTRL+[ इस्तेमाल करना भी इसी bit structure से आता है
अभी कोई टिप्पणी नहीं है.