Numbering Systems Tutorial


What is it?

There are many ways to represent the same numeric value. Long ago, humans used sticks to count, and later learned how to draw pictures of sticks in the ground and eventually on paper. So, the number 5 was first represented as:
 |  |  |  |  |    (for five sticks).

Later on, the Romans began using different symbols for multiple numbers of sticks:
 |  |  |   still meant three sticks,  but a   V   now meant five sticks, and an   X   was used to represent ten of them!

Using sticks to count was a great idea for its time. And using symbols instead of real sticks was much better.   One of the best ways to represent a number today is by using the modern decimal system. Why? Because it includes the major breakthrough of using a symbol to represent the idea of counting nothing.   About 1500 years ago in India, zero (0) was first used as a number!   It was later used in the Middle East as the Arabic, sifr. And was finally introduced to the West as the Latin, zephiro.  Soon you'll see just how valuable an idea this is for all modern number systems.


Decimal System
Most people today use decimal representation to count. In the decimal system there are 10 digits:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

These digits can represent any value, for example:
                  754.
The value is formed by the sum of each digit, multiplied by the base (in this case it is 10 because there are 10 digits in decimal system) in power of digit position (counting from zero):

שעור בשיטות ספירה  

מהו זה?

יש הרבה דרכים להציג אותו ערך מספרי. מזמן, בני אנוש השתמשו במקלות לספור, ואחר כך למדו איך לצייר תמונות של מקלות בקרקע ולבסוף בנייר. אז, המספר 5 היה מוצג כמו:
 |  |  |  |  | (לחמשה מקלות).


אחר כך, הרומאיים התחילו להשתמש בסמלים שונים למספרים כפולים של מקלות :  |  |  |  עדיין אמרו שלושה
מקלות, אבל V עכשיו אמרו חמשה מקלות, ו-X שימש להציג עשרה מהם !

להשתמש במקל לספור היה רעיון גדול לזמן שלו. ומשתמש בסמלים במקום מקל אמיתי היה הרבה יותר טוב. היום, אחד הדרכים הכי טובות להציג מספר הוא על ידי שימוש בשיטה העשרונית המודרנית. מדוע? כי זה כולל את פריצת הדרך העיקרית של סמל להציג את הרעיון של שום דבר.

לפני כ- 1500 שנים בהודו, שימש בפעם הראשונה אפס (0) כמספר ! לאחר מכן זה היה בשימוש במזרח התיכון כ-
sifr הערבי. וסוף סוף הוצג למערב כ- לטין (Latin) , ה- zephiro . בקרוב תראה פשוט  איך הרעיון הוא דבר ערך לכל מערכות של מספרים מודרניות.
 


מערכת עשרונית

רוב האנשים משתמשים היום בייצוג מספור עשרוני. בשיטה עשרונית יש 10 ספרות:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

הספרות האלה יכולות להציג כל ערך, למשל:
             754 .
הערך נוצר על ידי הסכום של כל ספרה, הכפיל של ידי הבסיס (במקרה הזה זה 10 כי יש 10 ספרות בשיטה עשרונית) בחזקה של מיקום של הספרה (החל מאפס):

Position of each digit is very important! for example if you place "7" to the end:
                  547
it will be another value:

מיקום של כל סיפרה מאוד חשובה! למשל אם אתה שם "7" בסוף:
                             547
זה יהיה ערך אחר:

Important note: any number in power of zero is 1, even zero in power of zero is 1:

הערה חשובה: כל מספר בחזקת אפס הוא 1, אפילו אפס בחזקת אפס הוא 1:

Binary System

Computers are not as smart as humans are (or not yet), it's easy to make an electronic machine with two states: on and off, or 1 and 0.
Computers use binary system, binary system uses 2 digits:
                   0, 1

And thus the base is 2.

Each digit in a binary number is called a BIT, 4 bits form a NIBBLE, 8 bits form a BYTE, two bytes form a WORD, two words form a DOUBLE WORD (rarely used):

מערכת בינארית

מחשבים לא חכמים כמו בני אנוש (או עוד לא),  זה קל לעשות מכונה אלקטרונית עם שתי מצבים: פעיל ומכובה, או 1 ו- 0 .


מחשבים משתמשים במערכת בינארית, מערכת בינארית משתמשת ב- 2 ספרות:

                       
      0 , 1

ולכן הבסיס היא 2.

כל סיפרה במספר בינארי נקראת סיבית, 4 סיביות יוצרות "ניבל", 8 סיביות יוצרות מילה, ושתי מילים יוצרות "מילה כפולה" (בשימוש לעיתים רחוקות).

 

There is a convention to add "b" in the end of a binary number, this way we can determine that 101b is a binary number with decimal value of 5.

The binary number 10100101b equals to decimal value of 165:

יש הסכם להוסיף "b" בסוף מספר בינארי, כך אנחנו יכולים לקבוע ש- 101b הוא מספר בינארי עם ערך עשרוני 5.

המספר הבינארי 10100101b שווה על פי ערך עשרוני 165 :

Hexadecimal System

Hexadecimal System uses 16 digits:

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

And thus the base is 16.

Hexadecimal numbers are compact and easy to read.
It is very easy to convert numbers from binary system to hexadecimal system and vice-versa, every nibble (4 bits) can be converted to a hexadecimal digit using this table:

מערכת בסיס 16 (אקסה)

מערכת אקסה משתמשת ב- 16 סיפרות:

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

ולכן הבסיס היא 16.

מספרים אקסה הם קומפקטיים וקלים לקרוא.

זה מאוד קל להפוך מספרים  ממערכת בינארית לאקסה  ולהפך, יכולים להפוך כל ניבל (4 סיביות) לספרה בסיס 16 תוך שימוש בטבלה שבהמשך:

Decimal
(base 10)
Binary
(base 2)
Hexadecimal
(base 16)
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

Decimal = עשרוני = בסיס 10

Binary = בינארי = בסיס 2

Hexadecimal = הקסה = בסיס 16

 

 

 

 

 

There is a convention to add "h" in the end of a hexadecimal number, this way we can determine that 5Fh is a hexadecimal number with decimal value of 95.
We also add "0" (zero) in the beginning of hexadecimal numbers that begin with a letter (A..F), for example 0E120h.

The hexadecimal number 1234h is equal to decimal value of 4660:

מוסכם להוסיף "h" בסוף של מספר בסיס 16, כה אנחנו יכולים לקבוע ש- 5Fh הוא מספר אקסה שערכו העשרוני הוא 95.

אנחנו גם מוסיפים "0" (אפס) בראשית של מספרים בסיס 16 המתחילים עם אות (A..F), למשל 0E120h.

המספר אקסה 1234h הוא שווה לערך העשרוני 4660:

Converting from Decimal System to Any Other

In order to convert from decimal system, to any other system, it is required to divide the decimal value by the base of the desired system, each time you should remember the result and keep the remainder, the divide process continues until the result is zero.

The remainders are then used to represent a value in that system.

Let's convert the value of 39 (base 10) to
             Hexadecimal System (base 16):

להפוך מבסיס עשרוני לכל בסיס אחר

כדי להפוך משיטה עשרונית, לכל מערכת אחרת, נדרש לחלק את הערך העשרוני של ידי הבסיס של המערכת הרצויה, כל הזמן אתה צריך לזכור את התוצאה ומחזיק את השאר,  תהליך החלק ממשיך עד שהתוצאה היא אפס.

אז השאריות הם מציגות ערך במערכת הזאת.

אנחנו נהפוך את הערך 39 (בבסיס 10)  למערכת אקסה (בסיס 16) :

As you see we got this hexadecimal number: 27h.
All remainders were below 10 in the above example, so we do not use any letters.

Here is another more complex example:
let's convert decimal number 43868 to hexadecimal form:

כפי שאתה רואה, אנו קיבלנו את הערך בסיס 16:  27h.
כל השאריות היו מתחת ל- 10 בדוגמה הקודמת.


כאן דוגמה יותר מסובכת:

אנחנו נהפוך את המספר העשרוני 43868 לבסיס 16 (אקסה): 

The result is 0AB5Ch, we are using the above table to convert remainders over 9 to corresponding letters.

Using the same principle we can convert to binary form (using 2 as the divider), or convert to hexadecimal number, and then convert it to binary number using the above table:



As you see we got this binary number: 1010101101011100b

Signed Numbers

There is no way to say for sure whether the hexadecimal byte 0FFh is positive or negative, it can represent both decimal value "255" and "- 1".

8 bits can be used to create 256 combinations (including zero), so we simply presume that first 128 combinations (0..127) will represent positive numbers and next 128 combinations (128..256) will represent negative numbers.

In order to get "- 5", we should subtract 5 from the number of combinations (256), so it we'll get: 256 - 5 = 251.

Using this complex way to represent negative numbers has some meaning, in math when you add "- 5" to "5" you should get zero.
This is what happens when processor adds two bytes 5 and 251, the result gets over 255, because of the overflow processor gets zero!

התוצאה היא  0AB5Ch , אנחנו משתמשים בטבלה מלמעלה להמרת האריות שמעל 9 לאותיות המתאימות

ניתן להשתמש באותו עיקרון ואנחנו יכולים להפוך לצורה בינארית (משתמש ב- 2 כמחלק), או להפוך לבסיס 16, ואז להמיר למספר בינארי תוך שימוש בטבלה הקודמת:



ואז אנו קיבלנו את המספר הבינארי:
1010101101011100b


מספרים מסומנים

אין דרך לומר על בטוח אם בית בסיס 16 חיובי או שלילי, זה יכול להציג שני ערכים עשרוניים "255" וגם  "1 - ".

8 סיביות יכולים להיות משומשים ליצירת 256 שילובים (כוללים אפס), לכן אנחנו פשוט סבורים ש- 128 שילובים הראשונים (0..127) מציגים מספרים חיוביים ו- 128 שילובים האחרים יציגו מספרים שליליים.

כדי להשיג "-5 " אנחנו צריכים להוריד 5 מהמספר של שילובים (256) , לכן זה יהיה:
251 = 5 - 256 .

יש מובן מיוחד בשימוש בדרך המורכבת הזאת להצגת מספרים חיוביים ושליליים , במתמטיקה כאשר אתה מוסיף "-5" ל- "5" אתה צריך להשיג אפס. זה מה שקורה כאשר מעבד מוסיף שני בתים 5 ו- 251, התוצאה נעשה מעל 255 בגלל הגלישה המעבד מגיע לאפס !

When combinations 128..256 are used the high bit is always 1, so this maybe used to determine the sign of a number.

The same principle is used for words (16 bit values), 16 bits create 65536 combinations, first 32768 combinations (0..32767) are used to represent positive numbers, and next 32768 combinations (32767..65535) represent negative numbers.


There are some handy tools in Emu8086 to convert numbers, and make calculations of any numerical expressions, all you need is a click on Math menu:

 כאשר משתמשים בשילובים 128..256, הסיבית  הגבוה תמיד 1, וזה קובע את הסימן של המספר.

אותו עיקרון משתמשים למילים (ערכים של 16 סיביות) 16 סיביות יוצרות 65536 שילובים,  32768  שילובים הראשונים  (0..32676) משמשים להצגת מספרים חיוביים, ו- 32768 שילובים הבאים (32767..65535) מציגים מספרים שליליים.


יש כמה כלים מועילים ב- EMU8086 להמרת מספרים, וביצוע חישובים בין ביטויים מספריים, כל מה שאתה צריך בוא נקישה בתפריט MATH או חישובית:

Number Convertor allows you to convert numbers from any system and to any system. Just type a value in any text-box, and the value will be automatically converted to all other systems. You can work both with 8 bit and 16 bit values.

Expression Evaluator can be used to make calculations between numbers in different systems and convert numbers from one system to another. Type an expression and press enter, result will appear in chosen numbering system. You can work with values up to 32 bits. When Signed is checked evaluator assumes that all values (except decimal and double words) should be treated as signed. Double words are always treated as signed values, so 0FFFFFFFFh is converted to -1.
For example you want to calculate: 0FFFFh * 10h + 0FFFFh (maximum memory location that can be accessed by 8086 CPU). If you check Signed and Word you will get -17 (because it is evaluated as (-1) * 16 + (-1) . To make calculation with unsigned values uncheck Signed so that the evaluation will be 65535 * 16 + 65535 and you should get 1114095.
You can also use the Number Convertor to convert non-decimal digits to signed decimal values, and do the calculation with decimal values (if it's easier for you).

These operation are supported:

~       not (inverts all bits).
*       multiply.
/       divide.
%       modulus.
+       sum.
-       subtract (and unary -).
<<      shift left.
>>      shift right.
&       bitwise AND.
^       bitwise XOR.
|       bitwise OR.

Binary numbers must have "b" suffix, example:
                00011011b

Hexadecimal numbers must have "h" suffix, and start with a zero when first digit is a letter (A..F), example:
                0ABCDh

Octal (base 8) numbers must have "o" suffix, example:
                77o


>>> Next Tutorial >>>

Number Convertor (ממיר מספרים) נותן לך להמיר מספרים מכל בסיס לכל בסיס. פשוט מקלידים ערך בכל תא של טקסט, והערך יהיה באופן אוטומטי בכל הבסיסים אחרים. אתה יכול לעבוד עם מספרים בעלי 8 סיביות ו- 16 סיביות.

Expression Evaluator (מעריך ביטוים) משמש לעשות חישובים בין מספרים בשיטות שונות וממיר מספרים משיטה אחד לאחר. הקלד ביטוי והקש  Enter, התוצאה תופיע במערכת (בסיס) של מספרים. אתה יכול לעבוד עם ערכים של עד 32 סיביות. כאשר סומן בתא של מסומן (Signed) המעריך מניח שכל הערכים (חוץ מעשרוני ומילים כפולות) מטופלים כמסומנים. מילים כפולות (Double words) , תמיד מטופלות כמספר מסומן, כך 0FFFFFFFFh מתורגם ל- "1 -".
למשל אתה רוצה לחשב:
0FFFFh * 10h + 0ffffh (מיקום מרבי של זיכרון שיכול להיות מטופל במעבד 8086) . אם אתה בודק מסומן ומילה אתה תשיג -17,  כי זה יערך כך: (-1) * 16 + (-1).

בשביל לעשות חישוב עם מספרים לא מסומנים בטל הסימן בתא Signed כך שההערכה תהיה 
65535 * 16 + 65535  והתשובה:  1114095.

אתה יכול  להשתמש גם בממיר מספרים להמרת מספרים לא עשרוניים  למספרים מסומנים עשרוניים (אם זה יותר קל בשבילך).


נתמך בפעולות  האלה:

 ~       לא (הופך כל הסיביות)
 *        מכפיל
 /       מחלק
 %      מודול
 +       סכם
 -        חסר
 >>    הזז שמאל
 <<    הזז ימינה
  &      כפל לוגי סיבית-סיבית
 ^      חיבור לוגי מיוחד סיבית-סיבית
  |      חיבור לוגי רגיל סיבית-סיבית

מספרים בינאריים חייבים "b" כסיומת, דוגמה:
                    00011011b
 
מספרים בסיס 16 חייבים "
h" כסיומת, ולהתחיל עם אפס כאשר הספרה הראשונה היא אות (A..F) ,דוגמה:
                     0ABCDh

מספרים אוקטלים (בסיס 8)  חייבים "o" כסיומת, דוגמה:
                      77o


>>> להמשך ההדרכה >>>