- 1 1. المقدمة
- 2 2. طرق تمثيل الأعداد
- 3 3. أساسيات النظام الست عشري
- 4 4. كتابة القيم الست عشرية في لغة C
- 5 5. النظام الست عشري وعمليات البت
- 6 6. النظام الست عشري والأعداد العائمة
- 7 7. أمثلة عملية على النظام الست عشري
- 8 8. الخلاصة
- 9 الأسئلة الشائعة حول النظام الست عشري في لغة C
- 9.1 س1: ماذا يحدث إذا نسيت كتابة 0x عند إعلان قيمة ست عشرية؟
- 9.2 س2: كيف يمكن إدخال قيمة ست عشرية باستخدام scanf؟
- 9.3 س3: كيف أتعامل مع القيم الست عشرية كسلاسل نصية؟
- 9.4 س4: ماذا لو كانت القيمة أقل من عدد الخانات الست عشرية المطلوبة؟
- 9.5 س5: ما الأسباب الشائعة لأخطاء التعامل مع النظام الست عشري؟
- 9.6 س6: كيف أحول عددًا عشريًا إلى ست عشري بسهولة؟
- 9.7 س7: هل يمكن تمثيل القيم السالبة بالنظام الست عشري؟
- 9.8 س8: كيف أتعامل مع مصفوفة من القيم الست عشرية؟
1. المقدمة
لغة C هي إحدى لغات البرمجة القوية التي يستخدمها العديد من المبرمجين، وتوفر طرقًا متعددة وفعالة للتعامل مع الأعداد. من بين هذه الطرق، يُستخدم “النظام الست عشري” بكثرة في عمليات معالجة البتات وإدارة الذاكرة. في هذه المقالة، سنشرح بالتفصيل أساسيات النظام الست عشري في لغة C وصولًا إلى تطبيقاته المتقدمة، بخطوات منظمة تسهّل فهمه حتى للمبتدئين.
2. طرق تمثيل الأعداد
الفرق بين النظام العشري، الثماني، والست عشري
في لغة C، يمكن تمثيل الأعداد بالشكل التالي:
- النظام العشري
هو النظام المستخدم يوميًا من قبل البشر. على سبيل المثال،123
يُفسَّر كعدد عشري. - النظام الثماني
عند إضافة0
في بداية العدد، يتم تفسيره كنظام ثماني. على سبيل المثال،0123
يعني “83” في النظام العشري. - النظام الست عشري
عند إضافة0x
أو0X
في بداية العدد، يتم تفسيره كنظام ست عشري. على سبيل المثال،0x123
يعني “291” في النظام العشري.
مزايا النظام الست عشري
النظام الست عشري هو صيغة مختصرة للنظام الثنائي، حيث تمثل خانة واحدة في النظام الست عشري أربعة بتات في النظام الثنائي، مما يجعله مناسبًا جدًا للتعامل مع البيانات على مستوى البت. كما يُستخدم بكثرة أثناء تصحيح الأخطاء (Debugging) لعرض محتوى الذاكرة.
3. أساسيات النظام الست عشري
بنية النظام الست عشري
يتكون النظام الست عشري من الرموز التالية:
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
حيثA
تمثل 10، وB
تمثل 11، …، وF
تمثل 15.
التحويل من النظام الست عشري إلى العشري
على سبيل المثال، لتحويل 0x2F
إلى النظام العشري:
0x2F = (2 × 16) + (15 × 1) = 47
التحويل من النظام العشري إلى الست عشري
لتحويل العدد 47
من النظام العشري إلى الست عشري:
- اقسم على 16 (47 ÷ 16 = 2 والباقي 15).
- يُمثل商 كخانة عليا والباقي كخانة دنيا.
- النتيجة:
0x2F
4. كتابة القيم الست عشرية في لغة C
صيغة الكتابة
في لغة C، تُكتب القيم الست عشرية كالتالي:
int hexValue = 0x1A; // القيمة 26 بالنظام العشري
عرض القيم الست عشرية باستخدام printf
لعرض القيم الست عشرية في لغة C، نستخدم الدالة printf
:
#include <stdio.h>
int main() {
int hexValue = 0x1A;
printf("ست عشري: %X\n", hexValue); // عرض بحروف كبيرة
printf("ست عشري: %x\n", hexValue); // عرض بحروف صغيرة
return 0;
}
الناتج:
ست عشري: 1A
ست عشري: 1a
مثال على إسناد القيم الست عشرية لمتغيرات عددية
يمكن إسناد القيم الست عشرية إلى متغيرات من النوع الصحيح:
int num = 0xFF; // تُعامل كقيمة 255 بالنظام العشري
5. النظام الست عشري وعمليات البت
استخدام أقنعة البت (Bitmask)
يُستخدم النظام الست عشري كثيرًا في عمليات الأقنعة على البتات. مثال:
#include <stdio.h>
int main() {
unsigned char value = 0xAF; // القيمة AF بالنظام الست عشري
unsigned char mask = 0x0F; // قناع لاستخراج آخر 4 بتات فقط
unsigned char result = value & mask;
printf("النتيجة: 0x%X\n", result); // النتيجة: 0x0F
return 0;
}
ضبط أعلام البت (Bit Flags)
لضبط بت معين على القيمة 1:
unsigned char flags = 0x00;
flags |= 0x10; // ضبط البت الرابع على 1
6. النظام الست عشري والأعداد العائمة
تمثيل الأعداد العائمة بالنظام الست عشري يعتبر أمرًا خاصًا، لكن يمكن القيام به باستخدام printf
:
#include <stdio.h>
int main() {
double value = 123.456;
printf("صيغة ست عشرية: %a\n", value);
return 0;
}
الناتج:
صيغة ست عشرية: 0x1.ed70a3d70a3d7p+6
7. أمثلة عملية على النظام الست عشري
تحليل تفريغ الذاكرة (Memory Dump)
مثال على استخدام النظام الست عشري لفحص محتوى الذاكرة أثناء التصحيح:
#include <stdio.h>
void dumpMemory(void* ptr, size_t size) {
unsigned char* byte = (unsigned char*)ptr;
for (size_t i = 0; i < size; i++) {
printf("%02X ", byte[i]);
if ((i + 1) % 16 == 0) printf("\n");
}
}
int main() {
int data = 0x12345678;
dumpMemory(&data, sizeof(data));
return 0;
}
8. الخلاصة
في هذه المقالة، شرحنا أساسيات النظام الست عشري في لغة C مع أمثلة عملية. يعد النظام الست عشري أداة مهمة ليس فقط لتمثيل الأعداد، بل أيضًا لعمليات البت وتصحيح الأخطاء. فهمه سيساعدك على تحسين مهاراتك في البرمجة بلغة C.
الأسئلة الشائعة حول النظام الست عشري في لغة C
س1: ماذا يحدث إذا نسيت كتابة 0x
عند إعلان قيمة ست عشرية؟
إذا لم تضف 0x
أو 0X
في بداية القيمة، فسيتم تفسيرها كنظام عشري. على سبيل المثال:
int value = 123; // هذا عدد عشري، وليس ست عشري
س2: كيف يمكن إدخال قيمة ست عشرية باستخدام scanf
؟
يمكنك استخدام معامل الصيغة %x
:
#include <stdio.h>
int main() {
int value;
printf("أدخل عددًا ست عشريًا (مثل: 0x1A): ");
scanf("%x", &value);
printf("القيمة بالنظام العشري: %d\n", value);
return 0;
}
س3: كيف أتعامل مع القيم الست عشرية كسلاسل نصية؟
يمكنك استخدام دالة sprintf
لتحويل القيمة إلى نص:
#include <stdio.h>
int main() {
int value = 255;
char hexStr[10];
sprintf(hexStr, "%X", value);
printf("سلسلة ست عشرية: %s\n", hexStr);
return 0;
}
س4: ماذا لو كانت القيمة أقل من عدد الخانات الست عشرية المطلوبة؟
لن يؤثر ذلك على التنفيذ، لكن يُفضل استخدام أصفار بادئة لتحسين وضوح الكود.
س5: ما الأسباب الشائعة لأخطاء التعامل مع النظام الست عشري؟
- نسيان كتابة
0x
. - استخدام معامل صيغة خاطئ مع
printf
. - عدم توافق نوع المتغير (مثل نسيان
unsigned
).
س6: كيف أحول عددًا عشريًا إلى ست عشري بسهولة؟
باستخدام printf
:
#include <stdio.h>
int main() {
int decimalValue = 42;
printf("عشري: %d -> ست عشري: %X\n", decimalValue, decimalValue);
return 0;
}
س7: هل يمكن تمثيل القيم السالبة بالنظام الست عشري؟
نعم، لكن يتم تخزينها داخليًا باستخدام صيغة المتمم الثنائي (Two’s Complement).
س8: كيف أتعامل مع مصفوفة من القيم الست عشرية؟
يمكنك تعريفها مباشرةً باستخدام القيم الست عشرية:
#include <stdio.h>
int main() {
unsigned char hexArray[] = {0x1A, 0x2B, 0x3C, 0x4D};
for (int i = 0; i < sizeof(hexArray); i++) {
printf("العنصر[%d]: 0x%X\n", i, hexArray[i]);
}
return 0;
}