موقف من الحياة اليومية#
كنت بتختار لون في برنامج تصميم، ولقيت اللون الأحمر مكتوب جنبه: #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 مرات وأسهل تقراه.
بالتفصيل#
إزاي بنعدّ بالسداسي عشر؟#
في النظام العشري عندنا 10 أرقام، ولما نوصل لـ 9 ونزوّد واحد، بنرجع للصفر ونزوّد خانة جديدة: 10.
النظام السداسي عشر نفس الفكرة، بس فيه 16 رمز. ولأن الأرقام العادية 10 بس، بنكمّل بالحروف. حسب مقرر CS50 في جامعة Harvard، الرموز هي:
0 1 2 3 4 5 6 7 8 9 A B C D E F
والجدول ده بيوضح كل رمز وقيمته بالعشري وبالثنائي:
| السداسي | العشري | الثنائي (4 بت) |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
ولما نعدّي F (يعني 15) ونزوّد واحد، بنكتب 10، ودي معناها 16.
قيمة كل خانة#
في العشري كل خانة قيمتها 10 أضعاف اللي على يمينها: 1، 10، 100… وفي الثنائي ضعف: 1، 2، 4، 8…
وفي السداسي عشر كل خانة قيمتها 16 ضعف: 1، 16، 256، 4096…
من سداسي لعشري: خطوة بخطوة#
خلينا نحوّل 2F لعشري:
- اكتب قيمة كل خانة: الخانة اللي على اليمين قيمتها 1، واللي على شمالها 16.
- حوّل كل رمز لرقمه: F معناها 15، و2 معناها 2.
- اضرب كل رقم في قيمة خانته واجمع:
2 × 16 + 15 × 1 = 32 + 15 = 47
النتيجة: 2F = 47 بالعشري.
ومثال من CS50: FF = 15 × 16 + 15 = 255، وده أكبر رقم ممكن يتكتب برمزين.
من عشري لسداسي: خطوة بخطوة#
دلوقتي العكس: عايزين نكتب 200 بالسداسي عشر.
- اقسم الرقم على 16:
200 ÷ 16 = 12والباقي8. - حوّل ناتج القسمة لرمز: 12 = C. ده الرمز اللي على الشمال.
- الباقي هو الرمز اللي على اليمين: 8.
النتيجة: 200 = C8.
اتأكد من النتيجة: 12 × 16 + 8 = 192 + 8 = 200 ✓
من ثنائي لسداسي: أسهل تحويل#
هنا السر اللي بيخلي النظام السداسي عشر مفضّل في عالم الكمبيوتر: 16 = 2 × 2 × 2 × 2، يعني كل رمز سداسي بيقابل 4 بت بالظبط. فالتحويل مش محتاج أي قسمة:
- قسّم الرقم الثنائي لمجموعات، كل مجموعة 4 بت، وابدأ من اليمين. مثلًا:
11010110تبقى1101و0110. - حوّل كل مجموعة لرمز من الجدول اللي فوق:
1101= D، و0110= 6. - حط الرموز جنب بعض:
D6.
النتيجة: 11010110 = D6، وده يساوي 214 بالعشري.
والعكس نفس الفكرة: كل رمز سداسي حوّله لـ 4 بت. يعني A3 = 1010 0011.
ولو المجموعة اللي على الشمال طلعت أقل من 4 بت، زوّد أصفار على شمالها. يعني 110 تبقى 0110.
هتقابل السداسي عشر فين؟#
1. ألوان المواقع والتصميم
حسب MDN، اللون بيتكتب بالشكل #RRGGBB: أول رمزين للأحمر (Red)، وبعدهم الأخضر (Green)، وبعدهم الأزرق (Blue). وكل لون منهم من 00 (مفيش خالص) لـ FF (أقصى درجة، يعني 255).
| اللون | الكود | الأحمر | الأخضر | الأزرق |
|---|---|---|---|---|
| أحمر | #FF0000 | 255 | 0 | 0 |
| أخضر | #00FF00 | 0 | 255 | 0 |
| أزرق | #0000FF | 0 | 0 | 255 |
| أبيض | #FFFFFF | 255 | 255 | 255 |
| أسود | #000000 | 0 | 0 | 0 |
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 بت) |
|---|---|
| 0 | 000 |
| 1 | 001 |
| 2 | 010 |
| 3 | 011 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
أشهر استخدام ليه: صلاحيات الملفات في 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: الآلة الحاسبة
- افتح برنامج Calculator (الآلة الحاسبة).
- اضغط زرار القائمة ☰ اللي فوق.
- اختار Programmer.
النتيجة المتوقعة: حسب Microsoft، الوضع ده مخصص «للثنائي والسداسي عشر وغيرهم»، وتقدر تكتب رقم بنظام وتشوفه بالأنظمة التانية.
على Linux: الطرفية
- افتح الطرفية (Terminal)، واكتب الأمر ده علشان تحوّل
FFمن سداسي لعشري:
echo $((16#FF))255
- وعلشان تحوّل 255 من عشري لسداسي:
printf '%x\n' 255ff
لو حصلت مشكلة: لو كتبت الأمر الأول وطلعلك رسالة خطأ، اتأكد إنك كاتب علامتي القوسين (( و)) كاملين، وإن مافيش مسافة بين 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 بالعشري.