<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mutesasira Mubarak</title>
    <description>The latest articles on DEV Community by Mutesasira Mubarak (@findbest_tools).</description>
    <link>https://dev.to/findbest_tools</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3873626%2Fc6b95422-904c-4050-9675-f1689b517205.png</url>
      <title>DEV Community: Mutesasira Mubarak</title>
      <link>https://dev.to/findbest_tools</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/findbest_tools"/>
    <language>en</language>
    <item>
      <title>Why Every Developer Should Understand Binary and ASCII (With Real Examples)</title>
      <dc:creator>Mutesasira Mubarak</dc:creator>
      <pubDate>Sat, 11 Apr 2026 14:23:36 +0000</pubDate>
      <link>https://dev.to/findbest_tools/why-every-developer-should-understand-binary-and-ascii-with-real-examples-10io</link>
      <guid>https://dev.to/findbest_tools/why-every-developer-should-understand-binary-and-ascii-with-real-examples-10io</guid>
      <description>&lt;p&gt;You've written thousands of lines of code. But have you ever stopped to think about what happens to a string like &lt;code&gt;"Hello"&lt;/code&gt; at the lowest level of your computer?&lt;/p&gt;

&lt;p&gt;It doesn't stay as &lt;code&gt;"Hello"&lt;/code&gt;. It becomes this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;01001000 01100101 01101100 01101100 01101111
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding why — and how — is one of those foundational concepts that makes everything else in computing click. This post covers it properly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What binary actually is (and why computers use it)
&lt;/h2&gt;

&lt;p&gt;Binary is a base-2 number system: only two digits, &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt;. The reason computers use it isn't philosophical — it's physical.&lt;/p&gt;

&lt;p&gt;Every processor is built on transistors. A transistor is a switch. It's either off (&lt;code&gt;0&lt;/code&gt;) or on (&lt;code&gt;1&lt;/code&gt;). Billions of these switches, working in combination, can represent any number, any character, any instruction.&lt;/p&gt;

&lt;p&gt;There's no "kind of on" state. Binary maps perfectly to the hardware reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  The jump from bits to characters: ASCII
&lt;/h2&gt;

&lt;p&gt;A single &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; is called a &lt;strong&gt;bit&lt;/strong&gt;. Eight bits make a &lt;strong&gt;byte&lt;/strong&gt;. One byte can represent 256 different values (2⁸ = 256).&lt;/p&gt;

&lt;p&gt;But a byte is just a number. How does the number &lt;code&gt;72&lt;/code&gt; become the letter &lt;code&gt;H&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;That's what &lt;strong&gt;ASCII&lt;/strong&gt; does. It's a lookup table — a standard agreement that number 72 means &lt;code&gt;H&lt;/code&gt;, number 65 means &lt;code&gt;A&lt;/code&gt;, number 32 means a space. Published in 1963, it became the foundation for virtually all text encoding that followed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Character → ASCII Decimal → 8-bit Binary
H         → 72            → 01001000
e         → 101           → 01100101
l         → 108           → 01101100
l         → 108           → 01101100
o         → 111           → 01101111
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every time your code does &lt;code&gt;"Hello"&lt;/code&gt;, the machine is actually working with those five bytes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters in practice
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;String comparison bugs&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="c1"&gt;// ASCII 65 vs ASCII 97 — completely different bytes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Case sensitivity isn't a language quirk. It's a direct consequence of ASCII values being different numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Character encoding errors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ever seen &lt;code&gt;â€™&lt;/code&gt; where an apostrophe should be? That's a UTF-8 encoded character being read as Latin-1. Different encoding tables, same bytes, different characters. Understanding binary encoding is what lets you debug these without guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Off-by-one in binary flags&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you're working with bitwise operations — permissions, flags, bitmasks — you're working with binary directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;READ&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mb"&gt;0b001&lt;/span&gt;  &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;WRITE&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mb"&gt;0b010&lt;/span&gt;  &lt;span class="c1"&gt;// 2&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;EXECUTE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mb"&gt;0b100&lt;/span&gt;  &lt;span class="c1"&gt;// 4&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;permissions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;READ&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;WRITE&lt;/span&gt;  &lt;span class="c1"&gt;// 0b011 = 3&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canRead&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;permissions&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;READ&lt;/span&gt;  &lt;span class="c1"&gt;// truthy&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canExecute&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;permissions&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;EXECUTE&lt;/span&gt;  &lt;span class="c1"&gt;// 0 = falsy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don't understand binary, this looks like magic. Once you do, it's obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uppercase/lowercase relationship
&lt;/h2&gt;

&lt;p&gt;One elegant consequence of ASCII's design: uppercase and lowercase letters differ by exactly one bit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A = 01000001 (65)
a = 01100001 (97)
       ^
   This bit flips
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference is 32 — which is exactly &lt;code&gt;0b00100000&lt;/code&gt;. This is why some low-level &lt;code&gt;toUpperCase&lt;/code&gt; implementations are literally just a bitwise operation: &lt;code&gt;char &amp;amp; ~0x20&lt;/code&gt; for uppercase, &lt;code&gt;char | 0x20&lt;/code&gt; for lowercase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference: common ASCII values worth memorizing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;th&gt;Characters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;48–57&lt;/td&gt;
&lt;td&gt;Digits 0–9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65–90&lt;/td&gt;
&lt;td&gt;Uppercase A–Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97–122&lt;/td&gt;
&lt;td&gt;Lowercase a–z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;'0'&lt;/code&gt; (not the number zero — the character)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last one trips people up constantly. The character &lt;code&gt;'0'&lt;/code&gt; has ASCII value 48, not 0. When you parse a digit character to an integer, you subtract 48 (or &lt;code&gt;'0'&lt;/code&gt;) — now you know why.&lt;/p&gt;

&lt;h2&gt;
  
  
  ASCII vs Unicode vs UTF-8
&lt;/h2&gt;

&lt;p&gt;ASCII handles 128 characters. The world has a few more than that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unicode&lt;/strong&gt; is the modern standard — it defines over 1.1 million possible characters covering every language, emoji, and symbol system. &lt;strong&gt;UTF-8&lt;/strong&gt; is the most common encoding of Unicode: it uses 1 byte for ASCII-compatible characters and 2–4 bytes for everything else.&lt;/p&gt;

&lt;p&gt;The clever part: UTF-8 is fully backward compatible with ASCII. Every valid ASCII document is valid UTF-8. For English text, they produce identical bytes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;If you want to see any of this in action without writing code, &lt;a href="https://findbest.tools/text/binary-code-translator" rel="noopener noreferrer"&gt;this binary code translator&lt;/a&gt; converts text to binary and back instantly — useful for verifying examples or decoding mystery strings.&lt;/p&gt;

&lt;p&gt;For code, here's a one-liner in JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Text to binary&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charCodeAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// "01001000 01100101 01101100 01101100 01101111"&lt;/span&gt;

&lt;span class="c1"&gt;// Binary to text&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;01001000 01100101&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromCharCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// "He"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;Binary isn't abstract theory. It's sitting underneath every string, every boolean, every bitwise flag in your code. The developers who understand it write cleaner low-level logic, debug encoding issues faster, and have a mental model that makes new concepts stick more easily.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Found this useful? I write about web fundamentals and developer tools at &lt;a href="https://findbest.tools" rel="noopener noreferrer"&gt;FindBest Tools&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>computerscience</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
