<?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/ar/tags/union/</link><description>Recent content in Union on P01NT</description><generator>Hugo</generator><language>ar</language><lastBuildDate>Thu, 13 Aug 2026 10:00:00 +0300</lastBuildDate><atom:link href="https://outofsrvc.github.io/ar/tags/union/index.xml" rel="self" type="application/rss+xml"/><item><title>الحقول البتية والاتحادات والتعداد</title><link>https://outofsrvc.github.io/ar/cworkshop/bit-fields-unions-enums/</link><pubDate>Thu, 13 Aug 2026 10:00:00 +0300</pubDate><guid>https://outofsrvc.github.io/ar/cworkshop/bit-fields-unions-enums/</guid><description>&lt;p>بسم الله الرحمن الرحيم.&lt;/p>
&lt;p>في هذا المقال سنتحدث عن: &lt;strong>Bit Fields&lt;/strong> (الحقول البتية)، &lt;strong>Unions&lt;/strong> (الاتحادات)، و &lt;strong>Enums&lt;/strong> (التعدادات).&lt;/p>
&lt;h2 id="1-الحقول-البتية-bit-fields">1. الحقول البتية (Bit Fields)&lt;/h2>
&lt;p>تعريفنا في المقال السابق أن الـ struct يوزع &lt;strong>بايتات&lt;/strong> — لكن ماذا لو أردنا تقسيم &lt;strong>بايت واحد إلى بتات&lt;/strong>؟ هنا يأتي الـ Bit Field: نحدد عدد البتات لكل عضو.&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 بتات
&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 بتات
&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 بت
&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 بتات ← داخل بايت واحد
&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 بت) | b (2) | c | (فارغ) |
&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>ملاحظة&lt;/strong>: المترجم يحزم الـ bit fields داخل البايت، لكن لا يضمن سلوكاً واحداً عبر جميع المترجمات (implementation-defined). عند التحليل، قراءة الـ bit fields في الـ assembly تتضمن عمليات &lt;code>and&lt;/code>/&lt;code>shift&lt;/code>.&lt;/p></description></item></channel></rss>