<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Union on P01NT</title><link>https://outofsrvc.github.io/en/tags/union/</link><description>Recent content in Union on P01NT</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 13 Aug 2026 10:00:00 +0300</lastBuildDate><atom:link href="https://outofsrvc.github.io/en/tags/union/index.xml" rel="self" type="application/rss+xml"/><item><title>Bit Fields, Unions, and Enums</title><link>https://outofsrvc.github.io/en/cworkshop/bit-fields-unions-enums/</link><pubDate>Thu, 13 Aug 2026 10:00:00 +0300</pubDate><guid>https://outofsrvc.github.io/en/cworkshop/bit-fields-unions-enums/</guid><description>&lt;p>Bismillah.&lt;/p>
&lt;p>In this article we cover &lt;strong>Bit Fields&lt;/strong>, &lt;strong>Unions&lt;/strong>, and &lt;strong>Enums&lt;/strong>.&lt;/p>
&lt;h2 id="1-bit-fields">1. Bit Fields&lt;/h2>
&lt;p>We established in the previous article that a struct distributes &lt;strong>bytes&lt;/strong> — but what if we want to split a &lt;strong>single byte into bits&lt;/strong>? That is the bit field: we specify the number of bits per member.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="k">typedef&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">u8&lt;/span> &lt;span class="nl">a&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 4 bits
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">u8&lt;/span> &lt;span class="nl">b&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 2 bits
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">u8&lt;/span> &lt;span class="nl">c&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 1 bit
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span> &lt;span class="n">student&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 7 bits total ← inside one byte
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">+---+---+---+---+---+---+---+---+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| a (4 bits) | b (2) | c | (free) |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+---+---+---+---+---+---+---+---+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>Note&lt;/strong>: the compiler packs bit fields into the byte, but does not guarantee identical behavior across all compilers (implementation-defined). During analysis, reading bit fields in assembly involves &lt;code>and&lt;/code>/&lt;code>shift&lt;/code> operations.&lt;/p></description></item></channel></rss>