ממיר בסיסי מספרים: עשרוני, בינארי, הקסדצימלי, תמיכה בשליליים
עולם המחשבים פועל על אפסים ואחדות, אבל אנשים חושבים בעשרות. ומתכנתים? הם צריכים להבין הכל בין לבין. בין אם אתם מנפים שגיאות בקוד נמוך-רמה, מגדירים צבעים ב-CSS, מחשבים מסכות IP או פותרים משימות במדעי המחשב, אתם נתקלים בצורך להמיר מספרים בין בסיסים.
מחשבונים רגילים ב-Windows או בנייד הם לרוב איטיים ומסורבלים. ממיר בסיסי המספרים החכם שלנו תוכנן על ידי מפתחים עבור מפתחים. הוא מציע המרה מיידית בזמן אמת, תמיכה במספרים גדולים במיוחד, וכאחד מהכלים המקוונים הבודדים, הוא מטפל נכון במספרים שליליים בייצוג בינארי.
מה ממיר בסיסי המספרים הזה יכול לעשות?
בפיתוח הווידג’ט הזה, התמקדנו בפתרון הבעיות הנפוצות ביותר של מתכנתים:
- תגובתיות בזמן אמת: אין כפתור “חשב”. התחילו להקליד בשדה HEX ותראו מיד כיצד BIN ו-DEC משתנים.
- תמיכה במספרים שליליים (Signed Integers): רוב הממירים המקוונים נכשלים כשאתם מקלידים
-5. אנחנו לא. הודות לבחירת רוחב הסיביות (8, 16, 32, 64 סיביות) אנו מדמים את ההתנהגות המדויקת של המעבד באמצעות מה שנקרא משלים לשניים. - קריאות קוד בינארי: להסתכל על
1110101011011110זה קשה לעיניים. הכלי שלנו יכול לעצב אוטומטית את הפלט כל 4 סיביות (ניבלים) ל-1110 1010 1101 1110, מה שמפחית באופן דרסטי טעויות בהעתקה. - תמיכת BigInt: צריכים להמיר מספר 64 סיביות או גיבוב (hash)? JavaScript סטנדרטי מסתיים במספר $2^{53}$. המנוע שלנו יכול לטפל במספרים באורך שרירותי במצב “ללא סימן” (Unsigned).
מדריך לבסיסי מספרים: מתי להשתמש בכל אחד?
1. בסיס עשרוני (DEC - Decimal)
- בסיס: 10 (ספרות 0-9)
- שימוש: חיי היומיום, פיננסים, ספירת לולאות בקוד.
- עובדה מעניינת: מחשבים לא מבינים אותה, הם חייבים להמיר אותה לבינארי.
2. בסיס בינארי (BIN - Binary)
- בסיס: 2 (ספרות 0, 1)
- שימוש: קוד מכונה, שערים לוגיים, מיסוך כתובות IP.
- טיפ: כל ספרה מייצגת סיבית אחת. 8 סיביות מרכיבות בייט אחד (Byte).
3. בסיס הקסדצימלי (HEX - Hexadecimal)
- בסיס: 16 (ספרות 0-9, אותיות A-F)
- שימוש: ייצוג קומפקטי של קוד בינארי. תו HEX אחד מייצג בדיוק 4 סיביות (ניבל). שני תווים (לדוגמה
FF) מייצגים בייט שלם. - דוגמאות:
- צבעים באינטרנט:
#FF5733(אדום, ירוק, כחול). - כתובות MAC:
00:1A:2B:3C:4D:5E. - הטלות זיכרון (Memory dumps).
- צבעים באינטרנט:
4. בסיס אוקטלי (OCT - Octal)
- בסיס: 8 (ספרות 0-7)
- שימוש: מחשבים ישנים יותר מבחינה היסטורית, כיום בעיקר הרשאות לינוקס (chmod).
- דוגמה: הפקודה
chmod 755מגדירה את ההרשאות rwx-rx-rx (קריאה, כתיבה, הפעלה).
איך לעבוד נכון עם מספרים שליליים?
זו התכונה המתקדמת ביותר של הממיר שלנו. בזיכרון המחשב לא קיים סימן “מינוס”. כדי לאחסן מספר שלילי, המחשב משתמש לרוב בשיטת המשלים לשניים (Two’s Complement).
אך תוצאת ההמרה של מספר שלילי תלויה בכמה סיביות מוקצות למשתנה. לכן, בסרגל העליון תמצאו את מתג רוחב סיביות.
דוגמה: איך נראה המספר -5?
נסו זאת בעצמכם בממיר שלנו:
-
הגדירו את הרוחב ל-8 סיביות.
- הזינו ב-DEC:
-5. - תוצאת HEX:
FB. - תוצאת BIN:
1111 1011. - הסבר: $256 - 5 = 251$ (שזה FB).
- הזינו ב-DEC:
-
הגדירו את הרוחב ל-16 סיביות.
- הזינו ב-DEC:
-5. - תוצאת HEX:
FFFB. - הסבר: מכיוון שיש לנו יותר מקום, ה”אחדות” ימלאו את שאר המקום משמאל.
- הזינו ב-DEC:
-
הגדירו את הרוחב ל-רק חיוביים (Unsigned).
- אם תזינו
-5, השדה יהפוך לאדום. מצב זה אינו תומך במספרים שליליים, מכיוון שהוא ידרוש אינסוף אחדות.
- אם תזינו
טיפ למקצוענים: אם אתם עובדים עם צבעים או כתובות IP, השתמשו תמיד במצב “רק חיוביים”. אם אתם עושים שיעורי בית ב-C/C++ או אסמבלר, עברו ל-32 סיביות או 64 סיביות.
טבלת המרות מהירות (Cheat Sheet)
לצורך התמצאות מהירה, להלן הערכים הבסיסיים שכל “איש IT” צריך לדעת בעל פה.
| עשרוני (DEC) | הקסדצימלי (HEX) | בינארי (BIN) | הערה |
|---|---|---|---|
| 0 | 00 | 0000 | אפס |
| 1 | 01 | 0001 | |
| 10 | 0A | 1010 | |
| 15 | 0F | 1111 | ערך מקסימלי ל-4 סיביות (ניבל) |
| 16 | 10 | 0001 0000 | |
| 127 | 7F | 0111 1111 | ערך מקסימלי ל-8 סיביות חתומות (char) |
| 255 | FF | 1111 1111 | ערך מקסימלי ל-8 סיביות ללא סימן (בייט) |
| 65 535 | FFFF | … | ערך מקסימלי ל-16 סיביות |
שאלות נפוצות (FAQ)
מה המשמעות של "עומק סיביות" (Bit Depth)?
מציין כמה זיכרון מוקצה למספר.- 8 סיביות: ערכים 0 עד 255 (או -128 עד 127). מתאים לסוג
charאוbyte. - 16 סיביות: ערכים עד 65,535. מתאים לסוג
short. - 32 סיביות:
intסטנדרטי בשפות מודרניות. - 64 סיביות: למספרים גדולים מאוד (
long long,BigInt).
למה המספר 255 נכתב ב-HEX כ-FF?
לבסיס ההקסדצימלי יש 16 ספרות (0-9 ו-A-F), כאשר ל-F יש ערך של 15. המספרFF מחושב כך: $(15 \times 16^1) + (15 \times 16^0) = 240 + 15 = 255$.
איך ממירים צבע HEX ל-RGB?
צבע אינטרנט, לדוגמה#E05412, מורכב משלושה בתים: אדום (E0), ירוק (54), כחול (12).
הזינו לתוך הממיר שלנו "E0" לשדה HEX -> תקבלו 224.
הזינו "54" -> תקבלו 84.
הזינו "12" -> תקבלו 18.
התוצאה היא rgb(224, 84, 18).
מה המשמעות של התחיליות 0x, 0b או 0o?
כדי שמתכנתים יוכלו להבחין בין בסיסים שונים, משתמשים בתחיליות:0x= הקסדצימלי (לדוגמה 0xFF)0b= בינארי (לדוגמה 0b101)0o= אוקטלי (לדוגמה 0o755)
למה השדה שלי האדים?
זוהי פונקציית אימות קלט. זה אומר שהזנתם תו שאינו שייך לבסיס הנתון. לדוגמה:- האות "G" ל-HEX (מותר רק A-F).
- הספרה "2" ל-BIN (מותר רק 0 ו-1).
- הספרה "8" ל-OCT (מותר רק 0-7).