موقف من الحياة اليومية#

كنت بتختار لون في برنامج تصميم، ولقيت اللون الأحمر مكتوب جنبه: #FF0000.

وبعدها بيومين ظهرتلك رسالة خطأ على الكمبيوتر، وفيها كود طويل بيبدأ بـ 0x.

وفي إعدادات الراوتر شفت عنوان غريب شكله كده: 2001:DB8:0:0:8:800:200C:417A.

حروف إنجليزية وأرقام مخلوطين ببعض في كل مكان! هي دي أكواد سرية؟ لا، دي كلها أرقام عادية جدًا، بس مكتوبة بنظام عدّ تاني اسمه النظام السداسي عشر. ولما تفهمه، الأكواد دي هتبقى مفهومة وسهلة.

خلاصة سريعة#

  • النظام السداسي عشر (Hexadecimal (Base-16) · النظام السداسي عشرنظام عدّ يستخدم 16 رمزًا هي الأرقام من 0 إلى 9 والحروف من A إلى F، وكل خانة فيه تساوي 16 ضعف الخانة التي على يمينها. ويُستخدم لكتابة البيانات الثنائية بشكل مختصر، فكل رمز فيه يقابل 4 بتات.عرض في القاموس) فيه 16 رمز: الأرقام من 0 لـ 9، والحروف من A لـ F (يعني A معناها 10، وF معناها 15).
  • الكمبيوتر بيستخدمه علشان كل رمز فيه = 4 بت بالظبط، فالبايت كله بيتكتب برمزين بس، زي FF بدل 11111111.
  • النظام الثماني (Octal (Base-8) · النظام الثمانينظام عدّ يستخدم 8 أرقام من 0 إلى 7، وكل رقم فيه يقابل 3 بتات. ومن أشهر استخداماته كتابة صلاحيات الملفات في أنظمة Linux وUnix.عرض في القاموس) فيه 8 أرقام من 0 لـ 7، وكل رقم = 3 بت، وأشهر استخدام ليه صلاحيات الملفات في Linux.

ببساطة#

فاكر من مقال النظام الثنائي إن الكمبيوتر بيخزّن كل حاجة على شكل 0 و1؟ المشكلة إن الأرقام دي طويلة جدًا وصعب على البني آدم يقراها. حاول تقرا ده من غير غلط: 1101011011110010.

النظام السداسي عشر زي الاختصار: بدل ما تكتب كل 4 بتات جنب بعض، بتكتب رمز واحد مكانهم. فالرقم اللي فوق يبقى D6F2. نفس القيمة بالظبط، بس أقصر 4 مرات وأسهل تقراه.

كل 4 بت بتتحول لرمز سداسي واحد: 1101 تبقى D، و0110 تبقى 6، فالبايت كله يبقى D6.

بالتفصيل#

إزاي بنعدّ بالسداسي عشر؟#

في النظام العشري عندنا 10 أرقام، ولما نوصل لـ 9 ونزوّد واحد، بنرجع للصفر ونزوّد خانة جديدة: 10.

النظام السداسي عشر نفس الفكرة، بس فيه 16 رمز. ولأن الأرقام العادية 10 بس، بنكمّل بالحروف. حسب مقرر CS50 في جامعة Harvard، الرموز هي:

0 1 2 3 4 5 6 7 8 9 A B C D E F

والجدول ده بيوضح كل رمز وقيمته بالعشري وبالثنائي:

السداسيالعشريالثنائي (4 بت)
000000
110001
220010
330011
440100
550101
660110
770111
881000
991001
A101010
B111011
C121100
D131101
E141110
F151111

ولما نعدّي F (يعني 15) ونزوّد واحد، بنكتب 10، ودي معناها 16.

قيمة كل خانة#

في العشري كل خانة قيمتها 10 أضعاف اللي على يمينها: 1، 10، 100… وفي الثنائي ضعف: 1، 2، 4، 8…

وفي السداسي عشر كل خانة قيمتها 16 ضعف: 1، 16، 256، 4096…

من سداسي لعشري: خطوة بخطوة#

خلينا نحوّل 2F لعشري:

  1. اكتب قيمة كل خانة: الخانة اللي على اليمين قيمتها 1، واللي على شمالها 16.
  2. حوّل كل رمز لرقمه: F معناها 15، و2 معناها 2.
  3. اضرب كل رقم في قيمة خانته واجمع: 2 × 16 + 15 × 1 = 32 + 15 = 47

النتيجة: 2F = 47 بالعشري.

ومثال من CS50: FF = 15 × 16 + 15 = 255، وده أكبر رقم ممكن يتكتب برمزين.

من عشري لسداسي: خطوة بخطوة#

دلوقتي العكس: عايزين نكتب 200 بالسداسي عشر.

  1. اقسم الرقم على 16: 200 ÷ 16 = 12 والباقي 8.
  2. حوّل ناتج القسمة لرمز: 12 = C. ده الرمز اللي على الشمال.
  3. الباقي هو الرمز اللي على اليمين: 8.

النتيجة: 200 = C8.

اتأكد من النتيجة: 12 × 16 + 8 = 192 + 8 = 200 ✓

من ثنائي لسداسي: أسهل تحويل#

هنا السر اللي بيخلي النظام السداسي عشر مفضّل في عالم الكمبيوتر: 16 = 2 × 2 × 2 × 2، يعني كل رمز سداسي بيقابل 4 بت بالظبط. فالتحويل مش محتاج أي قسمة:

  1. قسّم الرقم الثنائي لمجموعات، كل مجموعة 4 بت، وابدأ من اليمين. مثلًا: 11010110 تبقى 1101 و0110.
  2. حوّل كل مجموعة لرمز من الجدول اللي فوق: 1101 = D، و0110 = 6.
  3. حط الرموز جنب بعض: D6.

النتيجة: 11010110 = D6، وده يساوي 214 بالعشري.

والعكس نفس الفكرة: كل رمز سداسي حوّله لـ 4 بت. يعني A3 = 1010 0011.

ولو المجموعة اللي على الشمال طلعت أقل من 4 بت، زوّد أصفار على شمالها. يعني 110 تبقى 0110.

هتقابل السداسي عشر فين؟#

1. ألوان المواقع والتصميم

حسب MDN، اللون بيتكتب بالشكل #RRGGBB: أول رمزين للأحمر (Red)، وبعدهم الأخضر (Green)، وبعدهم الأزرق (Blue). وكل لون منهم من 00 (مفيش خالص) لـ FF (أقصى درجة، يعني 255).

اللونالكودالأحمرالأخضرالأزرق
أحمر#FF000025500
أخضر#00FF0002550
أزرق#0000FF00255
أبيض#FFFFFF255255255
أسود#000000000

2. عناوين IPv6

حسب المعيار RFC 4291، عنوان IPv6 بيتكتب 8 أجزاء بينهم :، وكل جزء من 1 لـ 4 رموز سداسية. مثل: 2001:DB8:0:0:8:800:200C:417A. وهنشرح العناوين دي بالتفصيل في مقالات الشبكات.

3. البرمجة وعناوين الذاكرة

علشان محدش يتلخبط ويفتكر إن 10 معناها عشرة، المبرمجين بيكتبوا قبل الرقم السداسي 0x. يعني 0x10 = 16، و0xFF = 255. وحسب CS50، عناوين الذاكرة بتتكتب بالشكل ده.

النظام الثماني#

النظام الثماني فيه 8 أرقام بس: من 0 لـ 7. وكل خانة قيمتها 8 أضعاف اللي على يمينها: 1، 8، 64…

ولأن 8 = 2 × 2 × 2، فكل رقم ثماني بيقابل 3 بت بالظبط. يعني التحويل من الثنائي للثماني زي السداسي بالظبط، بس بمجموعات من 3 بدل 4:

الثمانيالثنائي (3 بت)
0000
1001
2010
3011
4100
5101
6110
7111

أشهر استخدام ليه: صلاحيات الملفات في Linux

في Linux، كل ملف ليه 3 صلاحيات: قراءة (r) وكتابة (w) وتنفيذ (x). وحسب توثيق GNU، كل صلاحية ليها رقم:

  • قراءة = 4
  • كتابة = 2
  • تنفيذ = 1

وبتجمع الأرقام دي علشان تعمل رقم ثماني واحد. يعني 7 = 4 + 2 + 1 (قراءة وكتابة وتنفيذ)، و5 = 4 + 1 (قراءة وتنفيذ)، و6 = 4 + 2 (قراءة وكتابة).

والصلاحيات بتتكتب 3 أرقام: الأول لصاحب الملف، والتاني لمجموعته، والتالت لباقي المستخدمين. يعني:

  • 755 = صاحب الملف عنده كل الصلاحيات، والباقيين يقروا وينفّذوا بس. وبتظهر في Linux كده: rwxr-xr-x.
  • 644 = صاحب الملف يقرا ويكتب، والباقيين يقروا بس: rw-r--r--.

جرّبنا الرقمين دول فعليًا على ملف تجريبي في Fedora Linux، وطلعت الصلاحيات زي المكتوب بالظبط. وصلاحيات الملفات ليها مقال كامل في مقالات Linux.

جرّب بنفسك: التحويل بالكمبيوتر#

مش لازم تحسب كل حاجة بإيدك. الكمبيوتر يقدر يحوّل بين الأنظمة في ثانية.

على Windows: الآلة الحاسبة

  1. افتح برنامج Calculator (الآلة الحاسبة).
  2. اضغط زرار القائمة ☰ اللي فوق.
  3. اختار Programmer.

النتيجة المتوقعة: حسب Microsoft، الوضع ده مخصص «للثنائي والسداسي عشر وغيرهم»، وتقدر تكتب رقم بنظام وتشوفه بالأنظمة التانية.

على Linux: الطرفية

  1. افتح الطرفية (Terminal)، واكتب الأمر ده علشان تحوّل FF من سداسي لعشري:
نافذة الطرفية
echo $((16#FF))
الناتج المتوقع
255
  1. وعلشان تحوّل 255 من عشري لسداسي:
نافذة الطرفية
printf '%x\n' 255
الناتج المتوقع
ff

لو حصلت مشكلة: لو كتبت الأمر الأول وطلعلك رسالة خطأ، اتأكد إنك كاتب علامتي القوسين (( و)) كاملين، وإن مافيش مسافة بين 16 و# وFF.

جرّبنا الأمرين دول فعليًا على Fedora Linux بإصدار Bash 5.3.

للمتعمقين

إزاي لغات البرمجة بتكتب الأنظمة دي؟

حسب توثيق لغة Python، الأرقام بتتكتب بالأنظمة دي بإنك تحط قبلها بادئة:

  • 0b للثنائي، مثلًا 0b1011 = 11.
  • 0o للثماني، مثلًا 0o755 = 493.
  • 0x للسداسي عشر، مثلًا 0xFF = 255.

وفي Bash (الطرفية في Linux)، حسب توثيق GNU Bash:

  • الرقم اللي بيبدأ بـ 0 بيتفهم على إنه ثماني. يعني 0755 في الحسابات = 493 مش 755! ودي نقطة بتلخبط ناس كتير.
  • الرقم اللي بيبدأ بـ 0x بيتفهم سداسي عشر.
  • وتقدر تكتب أي نظام من 2 لـ 64 بالشكل base#n، زي 2#1011 = 11 و16#FF = 255.

الشكل المختصر للألوان

حسب MDN، اللون ممكن يتكتب 3 رموز بدل 6، وكل رمز بيتكرر. يعني #F09 = #FF0099. وممكن كمان يتكتب 8 رموز، وآخر رمزين بيحددوا الشفافية: 00 شفاف تمامًا، وFF مش شفاف خالص.

ليه صلاحيات chmod ممكن تبقى 4 أرقام؟

حسب توثيق GNU، الصلاحيات الكاملة 4 أرقام ثمانية مش 3. الرقم الأول (على الشمال) لصلاحيات خاصة اسمها setuid وsetgid وsticky bit، ولما بتكتب 3 أرقام بس، الرقم ده بيبقى صفر. ومثال من التوثيق: الرقم 664 معناه إن صاحب الملف ومجموعته يقروا ويكتبوا، والباقيين يقروا بس.

عناوين IPv6 بالتفصيل

عنوان IPv6 طوله 128 بت، ومقسوم 8 أجزاء كل جزء 16 بت، علشان كده كل جزء أقصى حد له 4 رموز سداسية (4 × 4 = 16). وحسب RFC 4291، الأصفار اللي على شمال كل جزء ممكن تتشال، بس لازم يفضل رقم واحد على الأقل في كل جزء. علشان كده بتلاقي DB8 بدل 0DB8، و0 بدل 0000.

أخطاء شائعة#

  • «10 معناها عشرة دايمًا»: غلط. 10 بالسداسي = 16، وبالثماني = 8، وبالثنائي = 2. علشان كده بنكتب 0x قبل الرقم السداسي.
  • «الحروف A–F في الكود دي أخطاء أو رموز سرية»: غلط. دي أرقام عادية من 10 لـ 15.
  • «#ff0000 لون مختلف عن #FF0000»: غلط. الاتنين نفس اللون، والحروف في السداسي عشر مش بتفرق بين الكبير والصغير.
  • «صلاحية 755 معناها الرقم سبعمية خمسة وخمسين»: غلط. دي 3 أرقام منفصلة (7 و5 و5)، كل رقم لفئة مستخدمين.
  • «لما أحوّل من ثنائي لسداسي أبدأ أقسّم من الشمال»: غلط. ابدأ من اليمين، وزوّد أصفار على شمال آخر مجموعة لو ناقصة.

المصطلحات#

  • النظام السداسي عشر (Hexadecimal (Base-16) · النظام السداسي عشرنظام عدّ يستخدم 16 رمزًا هي الأرقام من 0 إلى 9 والحروف من A إلى F، وكل خانة فيه تساوي 16 ضعف الخانة التي على يمينها. ويُستخدم لكتابة البيانات الثنائية بشكل مختصر، فكل رمز فيه يقابل 4 بتات.عرض في القاموس): نظام عدّ يستخدم 16 رمزًا (من 0 إلى 9 ومن A إلى F)، وكل رمز فيه يقابل 4 بتات.
  • النظام الثماني (Octal (Base-8) · النظام الثمانينظام عدّ يستخدم 8 أرقام من 0 إلى 7، وكل رقم فيه يقابل 3 بتات. ومن أشهر استخداماته كتابة صلاحيات الملفات في أنظمة Linux وUnix.عرض في القاموس): نظام عدّ يستخدم 8 أرقام (من 0 إلى 7)، وكل رقم فيه يقابل 3 بتات.
  • النظام الثنائي (Binary (Base-2) · النظام الثنائينظام عدّ يستخدم رقمين فقط هما 0 و1، وكل خانة فيه تساوي ضعف الخانة التي على يمينها. وهو النظام الذي يخزّن به الحاسوب البيانات.عرض في القاموس): نظام عدّ يستخدم الرقمين 0 و1 فقط.
  • البت (Bit (Binary Digit) · البتأصغر وحدة لتخزين المعلومات في الحاسوب، وقيمتها إما 0 أو 1.عرض في القاموس): أصغر وحدة لتخزين المعلومات، وقيمتها إما 0 أو 1.
  • البايت (Byte · البايتمجموعة من 8 بتات تُعامل كوحدة واحدة، ويمكنها تمثيل 256 قيمة مختلفة من 0 إلى 255.عرض في القاموس): مجموعة من 8 بتات، وتُكتب برمزين في النظام السداسي عشر.

اختبر نفسك#

الرقم السداسي 1F يساوي كام بالعشري؟

إظهار الإجابة

31. الرمز اللي على الشمال 1 وقيمة خانته 16، والرمز اللي على اليمين F ومعناها 15. يعني 1 × 16 + 15 = 31.

اللون #00FF00 لونه إيه؟

إظهار الإجابة

أخضر صافي. أول رمزين للأحمر = 00 (مفيش)، والتانيين للأخضر = FF (أقصى درجة)، والأخيرين للأزرق = 00 (مفيش).

حوّل الرقم الثنائي 11110000 للسداسي عشر.

إظهار الإجابة

F0. قسّمه لمجموعتين من 4 بت: 1111 = F، و0000 = 0. وده يساوي 240 بالعشري.