Skip to content
العودة إلى المدوّنة
دروس تعليمية

تحويل الأنظمة العددية: الثنائي والست عشري والثماني والعشري للمطورين

تعلّم تحويل الأنظمة العددية بين الثنائي والست عشري والثماني والعشري مع شرح خطوة بخطوة، وأمثلة بلغات JS وPython وGo وC. أداة تحويل مجانية عبر الإنترنت.

14 دقيقة للقراءة

تحويل الأنظمة العددية: الثنائي والست عشري والثماني والعشري للمطورين

في فترة ما بعد الظهر، تحدّق في 0x7FFF5FBFF8C0 داخل مُنقّح الأخطاء، ثم تنتقل لملف CSS لتعديل #FF5733، ثم تكتب chmod 755 في الطرفية. ثلاثة تمثيلات مختلفة للأرقام، والحساب نفسه وراءها جميعاً. إذا كنت تتوقف للتفكير عند التحويل بين الست عشري والثنائي، أو تتساءل لماذا يستخدم Unix النظام الثماني للصلاحيات — هذا الدليل سيوضّح تلك الروابط.

سنستعرض الأنظمة العددية الأربعة التي تظهر يومياً في البرمجة، وثلاث طرق تحويل تستحق الحفظ، وأكواد عملية بلغات JavaScript وPython وGo وC. إذا أردت تخطّي النظرية وتحويل رقم مباشرة، افتح محوّل الأنظمة العددية — يدعم أي أساس من 2 إلى 36 بدقة غير محدودة.

الأنظمة العددية الأربعة التي يستخدمها كل مطوّر

كل نظام عددي موجود في البرمجة لسبب عملي.

الثنائي (الأساس 2) — لغة الآلة

رقمان فقط: 0 و1. الترانزستور إما يوصّل أو يقطع — هذا القيد الفيزيائي يفرض النظام الثنائي. ستواجهه عند التعامل مع أقنعة البتات وأعلام الميزات والعمليات على مستوى البت وحسابات الشبكات الفرعية.

الثنائي يصبح طويلاً بسرعة. الرقم 255 بالعشري هو 11111111 بالثنائي — ثمانية أرقام لقيمة من ثلاثة أرقام. لذلك نادراً ما يكتب المبرمجون الثنائي الخام إلا عندما يكون لموقع كل بت معنى محدد.

الثماني (الأساس 8) — اختصار Unix

ثمانية أرقام: من 0 إلى 7. كل رقم ثماني يقابل بالضبط ثلاثة بتات ثنائية، ولهذا تستخدم صلاحيات ملفات Unix النظام الثماني — chmod 755 يضغط ثلاث مجموعات من ثلاثة بتات في ثلاثة أرقام مقروءة.

كان للثماني دور أوسع في حقبة PDP-11، حين كانت كلمات الآلة تنقسم بشكل نظيف إلى مجموعات من 3 بتات. اليوم هو شبه حصري لصلاحيات Unix، بالإضافة إلى بعض القيم الحرفية في C المسبوقة بـ 0 (مصدر أخطاء عندما يكتب أحدهم 0177 ظناً أنه العشري 177).

العشري (الأساس 10) — الافتراضي البشري

عشرة أرقام: من 0 إلى 9. هذا النظام الذي يعمل به دماغك افتراضياً — أرقام المنافذ، فهارس المصفوفات، أكواد HTTP، أبعاد البكسل. الحاسوب لا يعمل بالعشري داخلياً، لكن البشر يفعلون، لذا كل رقم موجّه للمستخدم يخرج بالأساس 10.

الست عشري (الأساس 16) — السكين السويسري للمطوّر

ستة عشر رمزاً: 0-9 وA-F. كل رقم ست عشري يمثّل بالضبط أربعة بتات (nibble واحد). رقمان ست عشريان = بايت واحد. دائماً.

ستجد الست عشري في عناوين الذاكرة (0x7FFF5FBFF8C0)، وألوان CSS (#FF5733)، وعناوين MAC (00:1A:2B:3C:4D:5E)، وتنسيق UUID، وبصمات التجزئة. إنه اللغة المشتركة للبرمجة على مستوى البايت.

جرّب التحويل بين الأنظمة الأربعة في محوّل الأنظمة العددية — أدخل قيمة بأي أساس وشاهد البقية تُحدَّث فوراً.

كيف يعمل تحويل الأنظمة العددية: ثلاث طرق أساسية

لا تحتاج أداة لتحويل الأنظمة العددية، وإن كانت تُسرّع العملية. ثلاث طرق تغطي كل الحالات.

الطريقة 1 — التوسّع الموضعي (أي أساس → عشري)

كل نظام موضعي يعمل بنفس المبدأ: كل رقم يُضرب في الأساس مرفوعاً لأس موقعه، بالعد من اليمين بدءاً من صفر.

الثنائي 1011:

1×2³ + 0×2² + 1×2¹ + 1×2⁰
= 8   + 0    + 2    + 1
= 11

الست عشري FF:

15×16¹ + 15×16⁰
= 240   + 15
= 255

في الكود، معظم اللغات توفّر دالة تحليل:

parseInt('1011', 2)   // 11
parseInt('FF', 16)    // 255
parseInt('755', 8)    // 493

الطريقة 2 — القسمة المتكررة (عشري → أي أساس)

للاتجاه العكسي، اقسم الرقم العشري على الأساس الهدف بشكل متكرر واجمع البواقي. اقرأها من الأسفل للأعلى.

العشري 255 → الست عشري:

255 ÷ 16 = 15  باقي 15 (F)
 15 ÷ 16 =  0  باقي 15 (F)
→ من الأسفل للأعلى: FF

العشري 42 → الثنائي:

42 ÷ 2 = 21  باقي 0
21 ÷ 2 = 10  باقي 1
10 ÷ 2 =  5  باقي 0
 5 ÷ 2 =  2  باقي 1
 2 ÷ 2 =  1  باقي 0
 1 ÷ 2 =  0  باقي 1
→ من الأسفل للأعلى: 101010
bin(42)    # '0b101010'
hex(255)   # '0xff'
oct(493)   # '0o755'

الطريقة 3 — تجميع البتات (ثنائي ↔ ست عشري/ثماني مباشر)

هذه الطريقة الأكثر استخداماً لدى المطورين ذوي الخبرة. بما أن 16 = 2⁴ و8 = 2³، يمكن التحويل بين الثنائي والست عشري (أو الثماني) بتجميع البتات مباشرة — بدون حسابات.

ثنائي → ست عشري: جمّع كل 4 بتات (nibble) من اليمين. أكمل المجموعة الأخيرة من اليسار بأصفار إن لزم.

ثنائي:     1010 1111
ست عشري:    A    F
→ AF

ثنائي → ثماني: جمّع كل 3 بتات من اليمين.

ثنائي: 111 101 101
ثماني:  7   5   5
→ 755

جدول مقابلات الـ nibble يستحق الحفظ:

ثنائيست عشريثنائيست عشري
0000010008
0001110019
001021010A
001131011B
010041100C
010151101D
011061110E
011171111F

بعد حفظ هذا الجدول، يصبح تحويل الثنائي إلى الست عشري مجرد قراءة سريعة.

تحويل الأنظمة العددية في كل لغة برمجة

أكواد عملية في اللغات الأربع الأكثر استخداماً لهذه العملية.

JavaScript / TypeScript

// تحليل: نص بأي أساس → رقم
parseInt('FF', 16)          // 255
parseInt('101010', 2)       // 42
parseInt('755', 8)          // 493

// تنسيق: رقم → نص بأي أساس
(255).toString(16)          // 'ff'
(42).toString(2)            // '101010'
(493).toString(8)           // '755'

// قيم حرفية
const bin = 0b11111111;     // 255
const oct = 0o377;          // 255
const hex = 0xff;           // 255

// BigInt للقيم التي تتجاوز 2⁵³
const big = BigInt('0xFFFFFFFFFFFFFFFF');
big.toString(2)             // 64 واحداً
big.toString(10)            // '18446744073709551615'

Python

# عشري → أنظمة أخرى (نصوص مسبوقة)
bin(255)          # '0b11111111'
oct(493)          # '0o755'
hex(255)          # '0xff'

# أنظمة أخرى → عشري
int('11111111', 2)    # 255
int('FF', 16)         # 255
int('755', 8)         # 493

# إخراج منسّق مع حشو
f'{255:08b}'      # '11111111'  (ثنائي من 8 أرقام)
f'{255:02x}'      # 'ff'       (ست عشري صغير)
f'{255:02X}'      # 'FF'       (ست عشري كبير)

# Python يدعم الدقة العشوائية أصلاً
big = int('F' * 64, 16)   # رقم من 256 بت، بدون طفحان

Go

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // تنسيق: int → نص بأي أساس
    fmt.Println(strconv.FormatInt(255, 16))  // "ff"
    fmt.Println(strconv.FormatInt(255, 2))   // "11111111"
    fmt.Println(strconv.FormatInt(493, 8))   // "755"

    // تحليل: نص بأي أساس → int
    n, _ := strconv.ParseInt("FF", 16, 64)  // 255
    fmt.Println(n)

    // أفعال Printf
    fmt.Printf("%b %o %x %d\n", 255, 255, 255, 255)
    // 11111111 377 ff 255
}

C

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main() {
    // إخراج بالعشري والثماني والست عشري
    printf("%d %o %x\n", 255, 255, 255);
    // 255 377 ff

    // تحليل من أي أساس
    long val = strtol("FF", NULL, 16);   // 255
    long bin = strtol("101010", NULL, 2); // 42

    // C لا يملك printf ثنائياً مدمجاً — استخراج يدوي للبتات:
    uint8_t byte = 0xAF;
    for (int i = 7; i >= 0; i--)
        putchar(((byte >> i) & 1) ? '1' : '0');
    // 10101111

    return 0;
}

سيناريوهات عملية لتحويل الأنظمة العددية

خمس حالات يتحوّل فيها تحويل الأنظمة العددية من نظرية أكاديمية إلى جزء من العمل اليومي.

1. تصحيح عناوين الذاكرة

المُنقّح يُظهر مؤشراً عند 0x7FFF5FBFF8C0. تحويل آخر بايتين إلى ثنائي — 1000 1100 0000 — يكشف محاذاة على حدود 64 بايت (ستة أصفار في النهاية). المحاذاة تؤثر على أداء الذاكرة المخبئية وعمليات SIMD والإدخال/الإخراج المعيّن بالذاكرة.

حساب المؤشرات أوضح بالست عشري أيضاً. إزاحة 0x100 من عنوان أساسي تعني بالضبط 256 بايت — صفحة واحدة في كثير من الأنظمة المضمّنة.

2. ألوان CSS الست عشرية ↔ RGB

اللون #FF5733 هو ثلاثة بايتات كأزواج ست عشرية:

الزوجست عشريعشريالقناة
FFFF255أحمر (الحد الأقصى)
575787أخضر
333351أزرق

الاختصار #F00 يتوسّع إلى #FF0000 — أحمر خالص. النسخة ذات 8 أرقام #FF573380 تضيف قناة شفافية حيث 80 (عشري 128) يعني حوالي 50% عتامة.

3. صلاحيات ملفات Unix (ثماني)

chmod 755 مفصّلاً:

7 → 111 → rwx  (المالك: قراءة + كتابة + تنفيذ)
5 → 101 → r-x  (المجموعة: قراءة + تنفيذ)
5 → 101 → r-x  (الآخرون: قراءة + تنفيذ)

كل رقم ثماني يرمّز مجموعة صلاحيات واحدة لأن ثلاثة بتات صلاحيات (قراءة=4، كتابة=2، تنفيذ=1) تتطابق مع رقم ثماني واحد (0-7). التوليفات الشائعة:

ثمانيثنائيالصلاحياتالاستخدام النموذجي
755111 101 101rwxr-xr-xملفات تنفيذية، مجلدات
644110 100 100rw-r--r--ملفات عادية
700111 000 000rwx------سكربتات خاصة
600110 000 000rw-------مفاتيح SSH، أسرار

4. حسابات الشبكات الفرعية

قناع /24 يعني 24 واحداً متتالياً في البداية بالثنائي:

11111111.11111111.11111111.00000000
→ 255.255.255.0

لإيجاد عنوان الشبكة، طبّق العملية AND على مستوى البت بين IP والقناع:

192.168.1.37   → 11000000.10101000.00000001.00100101
255.255.255.0  → 11111111.11111111.11111111.00000000
نتيجة AND     → 11000000.10101000.00000001.00000000
               → 192.168.1.0 (عنوان الشبكة)

مهندسو الشبكات ينتقلون بشكل روتيني بين العشري (تدوين IP) والثنائي (حسابات الأقنعة) والست عشري (التقاط الحزم). محوّل الأنظمة العددية يتيح التحقق من كل ثُمانية على حدة.

5. قراءة بصمات التجزئة وUUID

بصمة MD5 مثل d41d8cd98f00b204e9800998ecf8427e تحتوي 32 محرفاً ست عشرياً، تمثّل 16 بايت (128 بت). كل زوج ست عشري هو بايت واحد.

UUID يتبع نمط 8-4-4-4-12 بالست عشري:

550e8400-e29b-41d4-a716-446655440000

32 رقماً ست عشرياً مفصولة بشرطات — نفس الـ 128 بت، بتنسيق مختلف. نصف البايت للإصدار في الموقع 13 (الـ 4 في 41d4 تشير إلى UUID v4).

أنشئ بصمات تجزئة باستخدام مولّد تجزئة MD5 وSHA أو أنشئ معرّفات UUID باستخدام مولّد UUID — كلاهما ينتج مخرجات ست عشرية.

ما وراء الأساس 16: الأساس 36 والأساس 64 والأُسس المخصصة

الأنظمة الأربعة القياسية تغطي معظم العمل، لكن بعض الأُسس الأخرى تظهر في سياقات متخصصة.

الأساس 36 — ترميز أبجدي رقمي مضغوط

الأساس 36 يستخدم الأرقام العشرة والحروف الـ 26 (A-Z)، مما يعطي أكثر تمثيل أبجدي رقمي مضغوط ممكن بغض النظر عن حالة الأحرف. خدمات اختصار الروابط تحبه — معرّفات فيديوهات YouTube والروابط القصيرة ومفاتيح قواعد البيانات غالباً تستخدم الأساس 36.

(1000000).toString(36)    // 'lfls'
parseInt('lfls', 36)      // 1000000

مليون في أربعة محارف فقط. لمعرّفات قصيرة صالحة للروابط، يصعب التغلّب على ذلك.

الأساس 64 — ترميز بيانات (وليس نظاماً عددياً)

Base64 يبدو كأساس آخر، لكن غرضه مختلف. بدلاً من تمثيل قيمة عددية في نظام موضعي، يرمّز Base64 بيانات ثنائية عشوائية (صور، ملفات، رموز JWT) كنص ASCII. يستخدم A-Z وa-z و0-9 و+ و/ — 64 رمزاً إجمالاً.

هذا مخطط ترميز، وليس نظاماً عددياً. لترميز وفك ترميز Base64، استخدم مرمّز ومفكّك Base64.

أُسس عشوائية (2-36) وأين تظهر

بعض الأُسس الأخرى تظهر أحياناً:

  • الأساس 12 (الاثنا عشري): الوقت (12 ساعة)، الكميات (الدزينة). بعض الرياضيين يرون أن الأساس 12 أفضل من الأساس 10 لأن 12 لديه قواسم أكثر.
  • الأساس 60 (الستيني): الوقت (60 ثانية، 60 دقيقة) والزوايا (360°). موروث من الرياضيات البابلية.
  • الأساس 32: ترميز Crockford Base32 للمعرّفات المقروءة بشرياً (يستبعد الأحرف الملتبسة مثل I وL وO). يُستخدم أيضاً في الترميز الجغرافي.

محوّل الأنظمة العددية يدعم أي أساس صحيح من 2 إلى 36.

العمليات على مستوى البت وتحويل الأنظمة العددية

فهم الثنائي لا يقتصر على تحويل الأرقام — إنه الأساس لعمليات البت المنتشرة في برمجة الأنظمة وتطوير الألعاب وأنظمة الصلاحيات.

const READ  = 0b100;  // 4
const WRITE = 0b010;  // 2
const EXEC  = 0b001;  // 1

// دمج الصلاحيات بـ OR
const perms = READ | WRITE;  // 0b110 = 6

// التحقق من صلاحية بـ AND
(perms & READ)  !== 0   // true  — يملك صلاحية القراءة
(perms & EXEC)  !== 0   // false — لا يملك صلاحية التنفيذ

// تبديل صلاحية بـ XOR
perms ^ WRITE   // 0b100 = 4 — صلاحية الكتابة أُزيلت

// عمليات الإزاحة
1 << 3    // 0b1000 = 8  (1 مُزاح 3 إلى اليسار)
0xFF >> 4  // 0b00001111 = 15  (إزاحة يمين 4 = القسمة على 16)

أعلام الميزات، سجلات العتاد، بروتوكولات الشبكات، برمجة الرسوميات — كلها تعتمد على عمليات البت. عندما تقرأ الثنائي بطلاقة، تتحوّل معالجة البتات من شيء غامض إلى منطق واضح.

الأسئلة الشائعة

ما الأنظمة العددية الأربعة الرئيسية في البرمجة؟

الثنائي (الأساس 2)، الثماني (الأساس 8)، العشري (الأساس 10)، والست عشري (الأساس 16). الثنائي هو الشكل الفيزيائي للبيانات في العتاد. الثماني يُستخدم لصلاحيات Unix. العشري هو الافتراضي البشري. الست عشري يضغط الثنائي في شكل مقروء — كل رقم ست عشري يقابل بالضبط 4 بتات.

كيف أحوّل الثنائي إلى الست عشري؟

جمّع البتات في مجموعات من 4 من اليمين، وأكمل المجموعة الأخيرة من اليسار بأصفار. طابق كل مجموعة: 0000=0، 0001=1، …، 1010=A، …، 1111=F. مثال: الثنائي 10101111 → مجموعات 1010 1111 → الست عشري AF. يعمل هذا لأن 16 = 2⁴.

كيف أحوّل الست عشري إلى العشري؟

اضرب كل رقم ست عشري في 16 مرفوعاً لأس موقعه (الأيمن = 0)، ثم اجمع. تذكّر: A=10، B=11، C=12، D=13، E=14، F=15. مثال: الست عشري FF = 15×16¹ + 15×16⁰ = 240 + 15 = 255. بالكود: JavaScript parseInt('FF', 16)، Python int('FF', 16).

لماذا يستخدم المطورون الست عشري بدل الثنائي؟

الست عشري مضغوط. كل رقم ست عشري يقابل بالضبط 4 بتات، فيتحوّل 11111111 00001010 بالثنائي إلى FF0A بالست عشري — أقصر بكثير وأسهل في القراءة. الست عشري هو المعيار لعناوين الذاكرة وألوان CSS (#FF5733) وعناوين MAC ومخرجات التجزئة وتنسيق UUID.

ما هو الـ nibble وما علاقته بتحويل الست عشري؟

الـ nibble هو 4 بتات — نصف بايت. nibble واحد يقابل بالضبط رقماً ست عشرياً واحداً، مما يجعل تحويل الثنائي إلى الست عشري مجرد بحث nibble تلو الآخر. بايت واحد = nibble اثنان = رقمان ست عشريان. هذه المطابقة المنتظمة من 4 بتات هي سبب أن الست عشري أصبح المعيار لتمثيل البيانات على مستوى البايت.

لماذا تُكتب صلاحيات Unix بالثماني؟

كل مجموعة صلاحيات تحتوي ثلاثة بتات: قراءة (4)، كتابة (2)، تنفيذ (1). هناك ثلاث مجموعات (المالك، المجموعة، الآخرون). بما أن 2³ = 8، تتطابق ثلاثة بتات صلاحيات مع رقم ثماني واحد. 755 تعني المالك=7 (rwx)، المجموعة=5 (r-x)، الآخرون=5 (r-x). الثماني هو الأساس الطبيعي لتجميعات من 3 بتات.

كيف أتعامل مع أرقام أكبر من 2⁵³ في JavaScript؟

استخدم BigInt. أضف n بعد القيمة الحرفية أو استخدم المُنشئ BigInt(): العبارة BigInt('0xFFFFFFFFFFFFFFFF').toString(2) تنتج السلسلة الثنائية الكاملة من 64 بت. النوع Number القياسي يفقد الدقة فوق 9,007,199,254,740,991 (2⁵³ - 1). محوّل الأنظمة العددية يستخدم BigInt داخلياً ويعالج أرقاماً بأي حجم بدون فقدان دقة.

كيف أحوّل الست عشري إلى الثنائي؟

استبدل كل رقم ست عشري بمكافئه من 4 بتات عبر جدول الـ nibble بالاتجاه العكسي: 0=0000، 1=0001، …، A=1010، …، F=1111. مثال: الست عشري AFA (1010) + F (1111) → الثنائي 10101111. بالكود: JavaScript parseInt('AF', 16).toString(2) أو Python bin(int('AF', 16))[2:].

كيف يُمثَّل النص العربي بترميز UTF-8 الست عشري؟

الحرف العربي الواحد في UTF-8 يستهلك بايتين (16 بت)، بينما يستهلك الحرف اللاتيني بايتاً واحداً فقط. مثال: كلمة “مرحبا” تُرمَّز كـ D985 D8B1 D8AD D8A8 D8A7 — عشرة بايتات ست عشرية لخمسة أحرف مرئية. هذا مهم عند حساب أطوال السلاسل في قواعد البيانات (VARCHAR(255) يسع 127 حرفاً عربياً فقط)، وعند تمرير نصوص عربية في روابط URL حيث يجب ترميزها كـ %D8%A7 لكل بايت. للتحقق السريع: encodeURIComponent('ا') في المتصفح يُعيد '%D8%A7'.

مقالات ذات صلة

عرض جميع المقالات