מחשבון אורך סיביות וביטים - כלי גודל נתונים חינמי
חשב אורך סיביות וביטים עבור מספרים שלמים, מחרוזות הקס, וטקסט עם קידודי UTF-8, UTF-16, ASCII. כלי מקוון חינמי למפתחים, מדעני נתונים, ומהנדסי רשתות.
מחשבון אורך סיביות וביתים
8 סיביות = 1 ביתים
תצוגה
תיעוד
מהו מחשבון אורך ביטים ובתים?
מחשבון אורך הביטים והבתים קובע כמה ביטים ובתים דרושים לפיסת נתונים. ביט הוא ספרה בינארית יחידה, 0 או 1. בית הוא קבוצה של 8 ביטים. המחשבון מקבל מספר שלם, מחרוזת הקסדצימלית או מחרוזת טקסט, ומציג את הגודל המדויק בשתי היחידות.
הדבר חשוב בתכנות, בתקשורת נתונים ובאחסון נתונים. לכל אחד מהעמודה במסד הנתונים, ממנת הרשת ומהקובץ בדיסק יש גודל הנמדד בבתים, וגודל זה תלוי באופן שבו הנתונים נכתבים.
כיצד מחשבים את אורך הביטים של מספר שלם
אורך הביטים של מספר שלם חיובי הוא מספר הספרות בייצוג הבינארי שלו. לדוגמה, 255 בייצוג בינארי הוא 11111111, שבו יש 8 ספרות, ולכן אורך הביטים שלו הוא 8.
נוסחה: עבור מספר שלם חיובי n, אורך הביטים הוא מספר הספרות בייצוג של n בבסיס 2. במקרה המיוחד n = 0, אורך הביטים הוא 1.
מספרים שלמים שליליים משתמשים במשלים ל־2, הדרך המקובלת שבה מחשבים מאחסנים מספרים עם סימן. אורך הביטים של מספר שלם שלילי הוא מספר הביטים הקטן ביותר שיכול להכיל אותו בייצוג משלים ל־2. לדוגמה, −128 נכנס ב־8 ביטים (כ־10000000), אך −129 דורש 9 ביטים, משום ש־8 ביטים יכולים להגיע רק עד −128.
לאחר שאורך הביטים ידוע, אורך הבתים נמצא באמצעות עיגול כלפי מעלה לבית שלם:
אורך בתים = ⌈אורך ביטים ÷ 8⌉
הסמל ⌈ ⌉ פירושו "עיגול כלפי מעלה". ערך בן 9 ביטים עדיין דורש 2 בתים שלמים, משום שאי אפשר לפצל בית.
דוגמה פתורה
| מספר שלם | אורך ביטים | אורך בתים |
|---|---|---|
| 0 | 1 | 1 |
| 255 | 8 | 1 |
| 256 | 9 | 2 |
| −128 | 8 | 1 |
| −129 | 9 | 2 |
| 18,446,744,073,709,551,615 (2⁶⁴ − 1) | 64 | 8 |
כיצד מחשבים את אורך הביטים של מחרוזת הקסדצימלית
כל ספרה הקסדצימלית (0–9, A–F) מייצגת בדיוק 4 ביטים, משום ש־4 ביטים יכולים להכיל 16 ערכים אפשריים.
נוסחה: אורך הביטים = מספר הספרות ההקסדצימליות × 4. אורך הבתים הוא שוב אורך הביטים מחולק ב־8, בעיגול כלפי מעלה.
לדוגמה, המחרוזת ההקסדצימלית "FF" כוללת 2 ספרות, ולכן אורך הביטים שלה הוא 2 × 4 = 8 ביטים, או 1 בית. המחרוזת ההקסדצימלית "ABCD" כוללת 4 ספרות, ולכן היא מייצגת 16 ביטים, או 2 בתים. רווחים ותווי רווח לבן אחרים מוסרים לפני הספירה. גם מספר אי־זוגי של ספרות מעוגל כלפי מעלה לבית שלם: "F" היא באורך 4 ביטים, והמחשבון מציג אותה כ־1 בית.
כיצד מחשבים את אורך הבתים של מחרוזת טקסט
בטקסט, הגודל תלוי בקידוד התווים, כלומר בכלל המשמש להמרת תווים לבתים. המחשבון תומך בחמישה קידודים:
- UTF-8: קידוד באורך משתנה המשמש ברחבי האינטרנט. כל תו תופס 1 עד 4 בתים. אותיות אנגליות רגילות, ספרות וסימני פיסוק תופסים 1 בית לכל תו.
- UTF-16: משמש באופן פנימי ב־JavaScript וב־Windows. רוב התווים תופסים 2 בתים; תווים שמחוץ למישור הבסיסי הרב־לשוני, כגון אימוג'י רבים, תופסים 4 בתים.
- UTF-32: קידוד באורך קבוע. כל תו תופס בדיוק 4 בתים, בלי קשר לזהותו.
- ASCII: קידוד בן 7 ביטים המכסה 128 תווים, בעיקר אותיות אנגליות, ספרות וסימני פיסוק בסיסיים. כל תו תופס 1 בית. כל תו שאינו שייך לקבוצה זו נדחה.
- Latin-1 (ISO-8859-1): קידוד בן 8 ביטים המכסה 256 תווים, ובכללם אותיות עם סימנים דיאקריטיים המשמשות בשפות מערב־אירופיות. כל תו תופס 1 בית. תווים שאינם שייכים לקבוצה זו נדחים.
נוסחה: אורך בתים = מספר הבתים שהקידוד מפיק עבור המחרוזת. אורך ביטים = אורך בתים × 8.
הספירות מתייחסות לטקסט עצמו. לא נוסף סמן סדר הבתים, ולכן ספירה של UTF-16 או UTF-32 כאן קטנה ב־2 או 4 בתים מזו של כלי הכותב סמן בתחילת הקובץ.
דוגמה פתורה
הטקסט "Hello, world!" כולל 13 תווים, שכולם אותיות וסימני פיסוק רגילים ב־ASCII.
- UTF-8: 13 בתים (104 ביטים), משום שכל תו מתאים ל־1 בית.
- UTF-16: 26 בתים (208 ביטים), משום שכל תו תופס 2 בתים.
הטקסט "こんにちは世界" (שבעה תווים יפניים) תופס 3 בתים לתו ב־UTF-8, ובסך הכול 21 בתים (168 ביטים).
אימוג'י כגון 😀 נמצא מחוץ למישור הבסיסי הרב־לשוני. הוא תופס 4 בתים ב־UTF-8, 4 בתים ב־UTF-16 (כצמד סורוגטים), ו־4 בתים ב־UTF-32.
מדוע מספרים שלמים מסומנים משנים את התוצאה
מחשבים מאחסנים מספרים שליליים באמצעות משלים ל־2, ולא באמצעות סימן מינוס פשוט. משמעות הדבר היא שאורך הביטים של מספר שלם שלילי אינו פשוט אורך הביטים של הערך המוחלט שלו ועוד אחד. הכלל הוא: אורך הביטים הוא מספר הביטים הקטן ביותר k שעבורו הערך גדול או שווה ל־−2^(k−1). לכן −128 (השווה ל־−2⁷) נכנס ב־8 ביטים, ואילו −129 דורש 9 ביטים.
שאלות נפוצות
כיצד ממירים בתים לביטים? כופלים ב־8. עשרה בתים שווים ל־80 ביטים, משום שכל בית מכיל 8 ביטים מעצם הגדרתו.
מה ההבדל בין אורך ביטים לאורך בתים? אורך ביטים סופר ספרות בינאריות בודדות. אורך בתים סופר קבוצות של 8 ביטים, ומעגל כלפי מעלה לבית השלם הבא כאשר אורך הביטים אינו כפולה של 8.
כמה בתים תופס תו UTF-8? בין 1 ל־4. תווים המשותפים ל־ASCII תופסים 1 בית. תווים רבים באלפבית הלטיני, היווני והקירילי, הכוללים סימנים דיאקריטיים, תופסים 2 בתים. רוב התווים הסיניים, היפניים והקוריאניים תופסים 3 בתים. אימוג'י וסמלים נדירים אחרים תופסים 4 בתים.
כיצד מחושב אורך הבתים של מחרוזת הקסדצימלית? סופרים את הספרות ההקסדצימליות לאחר הסרת הרווחים, מכפילים ב־4 כדי לקבל ביטים, ואז מעגלים כלפי מעלה לבתים שלמים. כל בית הוא 2 ספרות הקסדצימליות, ולכן "FF" הוא 1 בית ו־"ABCD" הוא 2 בתים. ספרה יחידה כגון "F" היא 4 ביטים, ועדיין תופסת 1 בית.
מדוע מספר שלם שלילי זקוק לפעמים ליותר ביטים מהמספר החיובי המקביל לו? משלים ל־2 משתמש בביט אחד לציון הסימן, אך ביט זה משותף לטווח הערכים במקום להתווסף מעליו בכל מקרה. −128 נכנס באותם 8 ביטים כמו ערכים חיוביים עד 127, אך −129 כבר אינו נכנס ב־8 ביטים ודורש 9.
באילו גדלי קלט תומך המחשבון? מספרים שלמים, מחרוזות הקסדצימליות ומחרוזות טקסט באורך של עד 1,000,000 תווים.
מקורות
- "Character encoding." ויקיפדיה, קרן ויקימדיה. https://en.wikipedia.org/wiki/Character_encoding
- "UTF-8, UTF-16, UTF-32 & BOM." Unicode, Inc. https://www.unicode.org/faq/utf_bom.html
- "Two's complement." ויקיפדיה, קרן ויקימדיה. https://en.wikipedia.org/wiki/Two%27s_complement