Shayke Bilu SCE-Chapter-14-Bits and Bytes
14פרק
Bits & Bytesביטים ובתים /סיביות
שייקה בילו
יועץ ומרצה בכיר למדעי המחשב וטכנולוגית מידע
ומנהליותאקדמיות , מומחה למערכות מידע חינוכיות
Cקורס יסודות התכנות בשפת
1
רשימות מקושרות -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
ידוע לכל מתכנת כי במערכות רבות קיימת תחלופה תכופה של
(. מחיקה והוספה בקצב מהיר)אובייקטים
מערכת לרישום סטודנטים , למשל במערכת לניהול ספרים בספריה
.'וכומערכות ניווט , 6מערכת מעקב במצלמות כביש , באוניברסיטה
יש להעתיק את , במידה ומייצגים את הנתונים באמצעות מערך
" לצופף"-ו, כל המערך מחדש כל פעם כשצריך להוסיף משהו
.את כל המערך כשצריך למחוק משהו מהאמצע
זה לא יעיל.
זה לא נוח.
זה לא סביר.
2
מקושרותרשימות -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
לעבודה עם רשימות גדולות שיש בהן שינויים תכופים
.משתמשים ברשימה מקושרת במקום להשתמש במערך
רשימה מקושרת , שהוא אוסף של תאים רצופים, בניגוד למערך
שכל אחד מהם כולל גם מצביע , היא אוסף של תאים לא רצופים
. לתא שאחריו ברשימה
בלי צורך לשנות , זה מקל מאוד על ביצוע תוספות ומחיקות, כפי שאמרנו
.את שאר תאי הרשימה
כדי לעבור על הרשימה מספיק להחזיק מצביע לתא הראשון
. וכן הלאה, וממנו להתקדם לתא הבא, שלה
המוסכמה היא שהתא האחרון ברשימה מצביע עלNULL.
3
מקושרת של מספרים רשימה -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
3 5 7 9
3 5 7 9
:לעומת מערך
שדה מידע
מצביע
שדה מידע
מצביע
שדה מידע
מצביע
שדה מידע
מצביע
סוף
רשימה
התחלת
רשימה
4
איברים לרשימההוספת -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
(שיש בה תוספות ומחיקות)מעצם טבעה של רשימה מקושרת ,
. מספר האיברים בה לא ידוע מראש ואין עליו חסם
אנחנו נדרשים להוסיף איברים במהלך ריצת התוכנית.
תוספת איבר לרשימה מקושרת תיעשה בעזרת הקצאה דינאמית
:י"הקצאה דינאמית של איבר אחד נעשית במקרה זה ע. שלו
Item *ptr;
ptr = (Item *) malloc (sizeof(Item));
נתאר פונקציה להוספת איבר כזה לרשימה.
5
C -רשימות מקושרות במימוש -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
רשימה מקושרת איננה טיפוס משתנה שקיים , בניגוד למערך
.Cבשפת
עלינו לבנות אותה , כדי לשמור נתונים ברשימה מקושרת
ולממש בעצמנו את הפעולות אותן נבקש לבצע על , בעצמנו
(.'וכו, חיפוש איבר, מחיקת איבר, כמו הוספת איבר)איבריה
לעינו להקפיד כי האיבר האחרון ברשימה מצביע ל- NULL
ואילו האיבר הראשון מצביע לשני אחרת אין לנו בעצם רימה
.מקושרת
6
C -רשימות מקושרות במימוש -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
רשימה מקושרת היא למעשה פשוט אוסף האיברים שלה
(. שמחוברים ביניהם)
צריך להראות איך לממש איבר אחד ברשימה ואיך לקשר את
.האיברים
כדי לעבוד עם רשימה מקושרת יספיק לשמור , כפי שאמרנו קודם
כי ממנו אפשר להתקדם , את כתובת האיבר הראשון שלה
. לאחרים
קיימות רשימות מקושרות דו כיווניות וסיבוביות בהן האיבר
.האחרון מצביע על הראשון וכך נוצר מעגל איברים
7
Shayke Bilu SCE-Chapter-14-Bits and Bytes
שיכיל לפחות שני שדות מבנהידי -איבר ברשימה ייוצג על: שדה אחד יכיל מידע.
שני יכיל מצביע לאיבר הבא .
י"אז עבור הדוגמא של רשימת מספרים שלמים נגדיר איבר ע:
typedef struct Item
{
int data;
struct Item *next;
}Item; השדהdata יכיל את המספר שהאיבר מכיל.
השדהnext כלומר זה , אם אין איבר נוסף. )יכיל מצביע לאיבר הבא ברשימה (NULLאז ערך המצביע הזה יהיה , האיבר האחרון
3
data next
C -רשימות מקושרות במימוש -חזרה 8
איבר ברשימהמציאת -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
Item *Find(Item *head, int value)
{
Item *check = head;
while ((check != NULL) && (check->data !=
value))
check = check->next;
return check;
}
כל עוד לא הגענו לסוף ולא מצאנו את
.מתקדמים ברשימה –הערך המבוקש
מבוקשהפונקציה מקבלת מצביע לראש הרשימה וערך
כשהגענו לערך המבוקש או
מחזירים מצביע למקום , לסוף
שהגענו אליו
(באופן דומה יכולנו לחפש את האיבר הראשון שמקיים תנאי כלשהו)
9
רשימה מקושרתשחרור -חזרה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
בסיום השימוש ברשימה נרצה לשחרר את כל הזיכרון שהיא
. משתמשת בו
בשונה ממערך שהוקצה דינאמית ,free של ראש הרשימה משחרר רק את
.האיבר הראשון
י "כל אחד מאיברי הרשימה הוקצה עmalloc ו, נפרד- free משחרר את
.אחת בדיוק mallocמה שהוקצה בפקודת
נכתוב פונקציה שמקבלת מצביע לראש הרשימה ועוברת
.ומשחררת את כל האיברים שהוקצו על ידי פונקציית ההוספה
10
נושאים מבוא לסיביות ובתים
10מדוע לא בסיס ? מדוע להשתמש בסיביות וביטים?
דצימלי-הקסה/ ייצוג מידע בינארי
ייצוג של בתים
מספרים
תווים ומחרוזות
פקודות(instructions)
פעולות ברמת הביטים
לוגיקה בוליאנית
כיצד הדבר נראה בתוכניותC ?
Bits and Bytes - ובתיםסיביות
Shayke Bilu SCE-Chapter-14-Bits and Bytes
12
למעשה הוא ,בקרים-מיקרו ושל ,מחשבים של זיכרון
אחד שכל זעירים "תאים" :ביטים של ארוך אחד רצף
מראש מוגדרים מצבים משני באחד להיות יכול מהם
כל ,משתנה כל ."(1"-ו "0" מכנים אנחנו אותם מצבים)
דבר של בסופו הוא שלנו בתוכנה מציינים שאנחנו ערך
.הזה הרצף פני על קצר קטע
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
13
להסתיר מאמצים עושות המודרניות התכנות שפות רוב
-מיקרו עם כשעובדים נדרשת היא אבל ,הזאת העובדה את
.בקרים
ייצוג :עיקריים נושאים-תת לשני מתחלק הביטים נושא
פי על אף .טכניים נושאים והם בוליאנית ולוגיקה ,בינארי
.קריטיים הכי הנושאים אלה שניים הנושאים כל מבין ,כן
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
14
מספרים כמייצגי ביטים:
של קצר רצף ניקח אם .1 או 0 להכיל שיכול תא הוא ביט
:לזה דומה משהו נראה ,בזיכרון אקראי ממקום ביטים
?אומר זה מה .0111001010011010
?מכירים שאנחנו למספרים מתורגם כזה דבר איך
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
15
והמוכר היומיומי עשר בבסיס מספר כותבים כשאנחנו,
יכולה והיא ,"האחדות ספרת" היא ביותר הימנית הספרה
.0-9 בטווח להיות
שלה המשמעות אך ,טווח באותו היא שמשמאלה הספרה
.בעשר שמוכפלת ,"העשרות ספרת" כבר זו :אחרת
וכך באלף שאחריה זאת ,במאה מוכפלת הבאה הספרה
.הלאה
השני אחרי אחד הללו המכפילים את נכתוב:
1 – 10 – 100 – 1,000 – 10,000 – 100,000 – 1,000,000 – …
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
16
שכל לזהות כדי במתמטיקה גאון להיות צריך לא
:10 של חזקות הם האלה המספרים
100 – 101 – 102 – 103 – 104- 105 – 106 – …
בחזקת-בעשר למעשה מוכפלת ספרה כל ,כלומר-
.מאפס מתחילה המיקומים ספירת כאשר ,שלה-המיקום
שנמצאת 1 הספרה ,321 הוא המספר אם ,לדוגמה
.(1)= אפס בחזקת בעשר תוכפל אפס במיקום
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
17
0-9 אכן הוא ספרה כל של הטווח אם ויפה טוב זה כל,
אם נעשה מה .ספרה לכל אופציות עשר שיש כלומר
במקום ?0-1 בטווח ,בלבד אופציות לשתי אותנו יגבילו
עוברים אנחנו ,עשר של חזקות עם שעובד ,עשר בסיס
באותה שעובד ,(בינארי) שתיים לבסיס ברירה בלית
:שתיים של חזקות עם רק שיטה
20 – 21 – 22 – 23 – 24- 25 – 26 – …
ונקבל העשרונית בשיטה החישובים את נבצע
1 – 2 – 4 – 8 – 16 – 32 – 64
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
18
בינארי בבסיס שנכתב מספר לפענח כדי ,אומרת זאת,
שמשמאלה זו את ,1-ב ביותר הימנית הספרה את נכפיל
.ביחד הכל ונחבר ,הלאה וכן 4-ב בתור הבאה את ,2-ב
?הבא הבינארי המספר יוצא כמה ,לדוגמה
11101101
:להלן התרגיל, אם לא. כל הכבוד, 123אם קיבלתם
123=(1*1)+(1*2)+(0*4)+(1*8)+(1*16)+(1*32)+(1*64)+(0*128)
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
19
היא ביותר הבסיסית הנתונים יחידת ,התכנות שפות בכל
.ביטים שמונה שכולל ((byte)הבייט
אחד בייט באמצעות לייצג שאפשר המספרים טווח מה?
זה וכמה 00000000 זה כמה ,אחרות במילים
11111111?
255-ו 0 הן התשובות :הפעם החישוב את לכם אחסוך.
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
20
ואנחנו ,255 שערכו בייט מטיפוס משתנה לנו שיש נניח
כל .999-ל 1 להוסיף כמו זה ,מתמטית ,אחד לו מוסיפים
.משמאל 1 לנו ונוסף ,מתאפסות הספרות
אפשרות ואין ביטים 8-ל אותנו מגביל שהבייט מכיוון אבל
אפסים שכולם ביטים עם נשארים אנחנו ,משמאל 1 להוסיף
.בלבד
באותו .הלאה וכן ,1 נקבל 255-ל 2 נוסיף אם !לאפס חזרנו
כי לזכור יש) אפס שערכו מבייט 1 להפחית ננסה אם ,אופן
.255-ל נחזור (שליליים ערכים לקבל יכול אינו בייט
Bits and Bytes – מבוא לסיביות ובתים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
21
? 10מדוע מחשבים לא עובדים בבסיס
המחשב האלקטרוני הראשוןENIAC 10 -השתמש ב
סרבול אדיר ובזבוז זמן , שפורפרות ואקום לכל ספרה
.וחשמל
הנובע מקושי לאגור ולהעביר מידע קושי טכני
רמות שונות של אינפורמציה 10דרוש דיוק גבוה כדי לקודד
.על מוליך אחד
מסובך לבצע חישובים לוגיים
העלאה בחזקה והוצאת שורש ו, חילוק, כפל, חיסור, חיבור...
Shayke Bilu SCE-Chapter-14-Bits and Bytes
22
ייצוג בינארי
מימוש בחומרה
קל לאגור עם אלמנטיםbi-stable
העברה אמינה גם כשהמוליכים לא אמינים ומדויקים
0.0V
0.5V
2.8V
3.3V 0 1 0
Shayke Bilu SCE-Chapter-14-Bits and Bytes
23
ייצוג בינארי
(2בסיס )ייצוג בינארי
111011011011012 עם 1521310נייצג את
בהמשך נלמד איך מייצגים שברים:
1.5213נייצג את X 104 1.11011011011012 עם X 213
2…[0011]1.0011001100110011 עם 1.2010נייצג את
סיביות 13
Shayke Bilu SCE-Chapter-14-Bits and Bytes
24
ייצוג מספרים בבסיסים שונים
ייצוגhexadecimal:
16בסיס
ואותיות 9 -0ספרות‘A’ - ‘F’
ב– C כתובFA1D37B16 כך:
0xFA1D37Bאו
0xfa1d37b
Shayke Bilu SCE-Chapter-14-Bits and Bytes
25
ייצוג מספרים בבסיסים שונים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
דצימאלי ייצוג בינארי דצימאלי-הקס
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
26
ייצוג מספרים בבסיסים שונים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
דצימאלי ייצוג בינארי דצימאלי-הקס
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15
27
טווח של ערכי בתים: דוגמה
סיביות 8= בית
אפשרויות תצוגת מספרים לפי בסיסים:
1. Binary: from 000000002 to 111111112
2. Decimal: from 010 to 25510
3. Hexadecimal: from 0016 to FF16
Shayke Bilu SCE-Chapter-14-Bits and Bytes
28
(machine words)מילים
רוחב מילה'לכל מחשב יש'
הגודל המוקצה למידע מסוגinteger (כולל כתובות.)
רוב המחשבים המתקדמים היום כבר עובדים עם פס
(בתים 8)סיביות 64כתובות ברוחב
מרחב הכתובות 1.8 X 1019 18 בתים הקסה.
32כמו ברוחב פס של יגה'בגולא בהקסהמרחב הכתובת נמדד
GB4.3 -סיביות שהגביל את המרחב ל
לתנועה מרובת מידע , כרגע, רוחב פס זה מספיק בהחלט
.במערכות הן של מחשבים מרובי ליבות והן אחרים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
30
ארגון הזיכרון לפי בתים
(וירטואליות)' מדומות'תוכניות מתייחסות לכתובות •
:באופן אבסטרקטי•
בתיםגדול של מערך 1.
זיכרונותממומש עם היררכיה שלמה של סוגי בפועל 2.
רכיבי חומרה קובעים את המיפוי + (compiler)מהדר 3.
.לזיכרון הפיזי
.את ייצוג הכתובות במערך זהנראה 4.
Shayke Bilu SCE-Chapter-14-Bits and Bytes
31
ייצוג מידע
גודל בבתים של אובייקטים שונים שלC:
C Data Type Compaq Alpha Typical 32bit/64bit Intel IA32
int 4 4 4
long int 8 4 4
char 1 1 1
short 2 2 2
float 4 4 4
double 8 8 8
long double 8 8 10/12
char * 8 4 4
Shayke Bilu SCE-Chapter-14-Bits and Bytes
32
סידור המידע
ניתן לסדר את הבתים בתוך מלים מימין לשמאל או
... להפך
אין הסכמה ?מה מקובל
Sun’s, Mac’s are “Big Endian” machines
הבית הימני((least significant byte בכתובת הגבוהה
Alphas, PC’s are “Little Endian” machines
הבית הימני בכתובת הנמוכה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
33
דוגמה
Big Endian הבית הימני בכתובת הגבוהה
Little Endian הבית הימני בכתובת הנמוכה
x = 0x01234567
למשתנהx בתים 4יש ייצוג ב.
נניח שהכתובת שלx ( כלומר&x ) 0היאx100
0x100 0x101 0x102 0x103
01 23 45 67
0x100 0x101 0x102 0x103
67 45 23 01
Big Endian
Little Endian
01 23 45 67
67 45 23 01
Shayke Bilu SCE-Chapter-14-Bits and Bytes
34
כיצד נראה איך המידע מיוצג
תוכנית להדפסת ייצוג בבתים:
#include <stdio.h>
#define SIZE 10
void show_bytes(int start[])
{
int i;
for (i = 0; i < SIZE; i++)
printf("0x%p\t0x%.2x\n", start+i, start[i]);
printf("\n");
}
Printf directives:
%p: Print pointer
%x: Print Hexadecimal
Shayke Bilu SCE-Chapter-14-Bits and Bytes
35
כיצד נראה איך המידע מיוצג
תוכנית להדפסת ייצוג בבתים:
int main()
{
int start[SIZE]={0,1,2,3,4,5,6,7,8,9};
show_bytes(start,SIZE);
return 0;
}
Shayke Bilu SCE-Chapter-14-Bits and Bytes
36
ייצוג פקודות מכונה
פקודות מקודדות כבתים
מחשביRISC כגוןSun משתמשים באוסף קטן של
:פקודות
4 בתים מספיקים לייצוג כל הפקודות.
מחשביCISC כגון ה- PC משתמשים בקבוצה גדולה
:של הוראות
נעזרים בגודל משתנה של פקודה.
Shayke Bilu SCE-Chapter-14-Bits and Bytes
37
ייצוג פקודות
int sum(int x, int y)
{
return x+y;
}
.מחשבים שונים משתמשים בפקודות שונות וקידוד שונה של הפקודות
!אין סיכוי לתאימות
E0 08
81 C3
Sun sum
90 02 00 09
E5 8B
55 89
PC sum
45 0C 03 45 08 89 EC 5D C3
דוגמה זאת מתורגמת למספר פקודות בסיסיות בשפת •
. מכונה
4משתמשים ב Alpha, Sunבדוגמה זאת מחשבי •
. בתים
משתמשים בפקודות PCבדוגמה זאת מחשבי •
.בתים 1,2,3באורכים של
sumקידוד הפקודה
מספרילכל פקודה יש קוד
Shayke Bilu SCE-Chapter-14-Bits and Bytes
38
? מה עכשיו
כשראינו שאת כל סוגי המידע שהמחשב משתמש בהם, עכשיו ,
..., 1ו 0ניתן לייצג על ידי שימוש בתווים
נרצה לראות איך המחשב יכול לבצע חישובים עם מידע זה.
עלינו להיזכר בלוגיקה פסוקית, לשם כך.
לוגיקה בוליאנית מבוססת על מצבי אמת == לוגיקה פסוקית
י התנאים "שקר ובדיקתם ביחס שבין שני איברים ומעלה ע
:הבוליאניים הבאים
And - וגם
Or - או
Xor - או בלעדי
Not - שלילה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
40
(בוליאנית)לוגיקה פסוקית
פותחה על ידיGeorge Bool 19 -במאה ה
0 -כ ' שקר'ו 1 –כ ' אמת'נקודד
And
& 0 1
0 0 0
1 0 1
!
0 1
1 0
Not
Or
| 0 1
0 0 1
1 1 1
^ 0 1
0 0 1
1 1 0
Exclusive-Or (Xor)
Shayke Bilu SCE-Chapter-14-Bits and Bytes
41
ו ’|‘ = ’+‘נציב‘*’ = ‘&’.
קבעו אם –עבור כל אחד מהביטויים הבאים : תרגיל .נכון המקבילהביטוי
( תכונה של פעולות בינאריות)קומוטטיביות:
A | B = B | A A + B = B + A
A & B = B & A A * B = B * A
תכונה של פעולה בינארית המיישמת את חוק )אסוציאטיביות (:הקיבוץ
(A + B) + C = A + (B + C)
(A * B) * C = A * (B * C)
נשווה אלגברה בוליאנית לאלגברה אריתמטית
Shayke Bilu SCE-Chapter-14-Bits and Bytes
42
שפת C סיביות על פעולות לבצע מאפשרת (bitwise
operations), האופרנדים של הסיביות על פעולות שהן:
פעולת AND האופרטור ידי-על המסומנת &.
פעולת OR האופרטור ידי-על המסומנת |.
פעולת NOT האופרטור ידי-על המסומנת ~.
פעולת XOR האופרטור ידי-על המסומנת ^ .
האופרטור ידי-על המסומנת שמאלה הזזה פעולת >> .
האופרטור ידי-על המסומנת ימינה הזזה פעולת << .
בינאריים אופרטורים הם סיביות על הפועלים האופרטורים כל
שהוא NOT האופרטור למעט ,(אופרנדים שני לקבל המצפים)
.(אחד אופרנד לקבל המצפה)אופרטור
פעולות על סיביות
Shayke Bilu SCE-Chapter-14-Bits and Bytes
43
הפעולהAND והיא דומה &, ידי -על סיביות מסומנת על
.&&ידי -הבוליאנית המסומנת על ANDלפעולה
טבלת האמת של הפעולה&:
אם לפחות אחת 0בין שתי סיביות תחזיר & פעולת , כלומר
.1רק אם שתי הסיביות הן 1ותחזיר ; 0מהסיביות היא
ANDהפעולה
0 =0 &0
0 =1 &0
0 =0 &1
1 =1 &1
Shayke Bilu SCE-Chapter-14-Bits and Bytes
44
אם נבחן את טבלת האמת של הפעולהAND , נבחין
:בתכונות הבאות
כשמפעילים על סיבית מסוימתb עם &את הפעולה
.אז הסיבית לא משתנה, 1סיבית
b & 1 = b
כשמפעילים על סיבית מסוימתb עם & את הפעולה
.אז הסיבית מתאפסת, 0סיבית
b & 0 = 0
ANDהפעולה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
45
לַמֵסך מנת על & בפעולה להשתמש שניתן היא המסקנה (to
mask) של הייצוג משאר אותה ולבודד ,מסוימת סיבית
.המספר
שבמשתנה נניח :לדוגמא num ואנחנו ,שלם 'מס מאוחסן
קוד קטע הנה .מימין הרביעית הסיבית מהי לדעת מעוניינים
:מתאים
if (num & 8 != 0)
printf (“הסיבית הרביעית מימין היא דלוקה”);
else
printf (“הסיבית הרביעית מימין היא כבויה”);
ANDהפעולה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
46
הפעולהOR והיא דומה לפעולה |, ידי -על סיביות מסומנת על
OR ידי -הבוליאנית המסומנת על||.
טבלת האמת של הפעולה|:
אם לפחות אחת 1בין שתי סיביות תחזיר | פעולת , כלומר
.0רק אם שתי הסיביות הן 0ותחזיר ; 1מהסיביות היא
מה יהיה הפלט של קטע הקוד הבא:
int num = 72 | 184;
printf (“%d”, num); 248: פלט יהיה.
ORהפעולה
0 =0 |0
1 =1 |0
1 =0 |1
1 =1 |1
Shayke Bilu SCE-Chapter-14-Bits and Bytes
47
הפעולה של האמת טבלת את נבחן אם OR, נבחין
:הבאות בתכונות
מסוימת סיבית על כשמפעילים b עם | הפעולה את
.נדלקת הסיבית אז ,1 סיבית
b | 1 = 1
מסוימת סיבית על כשמפעילים b עם | הפעולה את
.שינוי ללא נותרת הסיבית אז ,0 סיבית
b | 0 = b
ORהפעולה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
48
להדליק מנת על | בפעולה להשתמש שניתן היא המסקנה
.אחרות סיביות לשנות מבלי ,מבוקשות סיביות
שבמשתנה נניח :לדוגמא num ואנחנו ,שלם 'מס מאוחסן
.מימין הרביעית הסיבית את להדליק מעוניינים
מתאימה הוראה הנה:
num = num | 8;
המקוצרת ההוראה גם קיימת &=.
ORהפעולה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
49
הפעולה של נוספות תכונות OR:
מסוימת סיבית על כשמפעילים b עם | הפעולה את
.משתנה לא הסיבית אז ,עצמה
b | b = b
מסוימת סיבית על כשמפעילים b עם | הפעולה את
.נדלקת הסיבית אז ,ההפוכה הסיבית
b | ~b = 1
Shayke Bilu SCE-Chapter-14-Bits and Bytes
50
ORהפעולה
מה יהיה הפלט של קטע הקוד הבא:
int num1=11;
int num2=num1 | num1, num3=num2 & num2;
printf (“%d %x %o\n”, num2, num2, num2);
printf (“%d %x %o\n”, num3,num3,num3);
Shayke Bilu SCE-Chapter-14-Bits and Bytes
51
ORהפעולה
הפעולה NOT זהה והיא ,~ ידי-על מסומנת סיביות על
.! ידי-על המסומנת הבוליאנית NOT לפעולה
הפעולה של האמת טבלת ~:
מתהפכת היא ,סיבית על ~ פעולת כשמבצעים ,כלומר,
.לאפס מאחד או ,לאחד מאפס הופך ערכה ,כלומר
NOTהפעולה
1 =0~
0 =1~
Shayke Bilu SCE-Chapter-14-Bits and Bytes
52
הבא הקוד קטע של הפלט יהיה מה:
int num = 72;
printf (“%d”, ~num);
.-73 יהיה זה במקרה הפלט
נרשום אם הפלט יהיה ומה %u במקום %d?
של שגודלו בהנחה) 65,463 יהיה הפלט int בתים 2 הוא
.(בתים 4 ולא
NOTהפעולה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
53
ברור שמתקיים~~b == b .
אםa ו-b מורגן-אז מתקיימים גם חוקי דה, הן סיביות:
~(a & b) == ~a | ~b
~(a | b) == ~a & ~b
מה יהיה הפלט של קטע הקוד הבא?
char num = 13;
printf (“%d %d”, num &~num,num| ~num);
Shayke Bilu SCE-Chapter-14-Bits and Bytes
54
NOTהפעולה
הפעולה XOR (exclusive or) ידי-על מסומנת ^. זהה (מוציא 'או') XOR הפעולה של האמת טבלת
למעט ,(מכיל 'או') OR הפעולה של האמת לטבלת
XOR – כזה במקרה .1 הם האופרנדים ששני במקרה
.0 תחזיר
הפעולה של האמת טבלת ^:
הסיביות אם 1 תחזיר סיביות שתי בין ^ פעולת ,כלומר
.זהות הן אם 0 ותחזיר ,מזו זו שונות הן
XORהפעולה
0 =0 ^0
1 =1 ^0
1 =0 ^1
0 =1 ^1
Shayke Bilu SCE-Chapter-14-Bits and Bytes
55
מה יהיה הפלט של קטע הקוד הבא:
unsigned int num = 72 ^ 184;
printf (“%u”, num);
240כלומר הפלט יהיה.
XORהפעולה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
56
הפעולה של האמת טבלת את נבחן אם XOR, נבחין
:הבאות בתכונות
מסוימת סיבית על כשמפעילים b עם ^ הפעולה את
.מתהפכת הסיבית אז ,1 סיבית
b ^ 1 = ~b
מסוימת סיבית על כשמפעילים b עם ^ הפעולה את
.שינוי ללא נותרת הסיבית אז ,0 סיבית
b ^ 0 = b
Shayke Bilu SCE-Chapter-14-Bits and Bytes
57
XORהפעולה
הבא הקוד קטע של הפלט יהיה מה?
int num1 = 72;
int num2 = num1 ^ -1;
printf (“%d %u”, num2, num2);
הפקודה גם קיימת =| , =& לפעולות בדומה ^= .
Shayke Bilu SCE-Chapter-14-Bits and Bytes
58
XORהפעולה
הפעולה של נוספות תכונות XOR:
מסוימת סיבית על כשמפעילים b עם ^ הפעולה את
.מתאפסת הסיבית אז ,עצמה
b ^ b = 0
מסוימת סיבית על כשמפעילים b עם ^ הפעולה את
.נדלקת הסיבית אז ,ההפוכה הסיבית
b ^ ~b = 1
Shayke Bilu SCE-Chapter-14-Bits and Bytes
59
XORהפעולה
הבא הקוד קטע של הפלט יהיה מה:
int num = 11;
int num2=num1^num1,num3=num1^~num1;
printf (“%d %d”, num2, num3);
שלישית הסיבית את (~) ההופכת בלבד אחת הוראה כתבו
:num המשתנה של מימין
num = num ^ 4;
Shayke Bilu SCE-Chapter-14-Bits and Bytes
60
XORהפעולה
בפעולה מעניין שימוש XOR לממש מנת על הוא
:עזר במשתנה שימוש ללא אך ,(swap) החלפה פונקציית
void swap (int *num1, int *num2)
{
*num1 = *num1 ^ *num2;
*num2 = *num1 ^ *num2;
*num1 = *num1 ^ *num2;
} Shayke Bilu SCE-Chapter-14-Bits and Bytes
61
XORהפעולה
ידי שימוש בהוראות המקוצרות-או על:
void swap (int *num1, int *num2)
{
*num1 ^= *num2;
*num2 ^= *num1;
*num1 ^= *num2;
}
Shayke Bilu SCE-Chapter-14-Bits and Bytes
62
XORהפעולה
בשפת C סיביות את להזיז המאפשרים אופרטורים קיימים
.ושמאלה ימינה הביטוי
והאופרטור (שמאלה בסיביות הזזה המבצע) << האופרטור זהו
ייכנסו שיתפנו למקומות .(ימינה בסיביות הזזה המבצע) >>
.אפסים
אופרנדים שני מקבלים האופרטורים שני:
להזיז יש שלו הסיביות שאת הביטוי זהו השמאלי האופרנד.
לבצע שצריך ההזזות 'מס זהו הימני האופרנד.
הזזה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
63
מה יהיה הפלט של קטע הקוד הבא?
printf (“%d”, 7 << 2); מה מבצע קטע הקוד הבא?
int count = 0; scanf (“%d”, &a); while (a != 0) { count += a & 1; a=a>>1; /* a >>= 1 : אפשר היה לרשום בקיצור */
} printf (“%d”, count);
הזזה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
64
מה לדעתכם יהיה הפלט של קטע התכנית הבא?
האם זה יהיה הפלט בכל סביבת עבודה?
ניתן להשתמש באופרטורים של הזזה על מנת
לממש ביעילות כפל בחזקות של שתיים או חלוקה
:בחזקות של שתיים
a = a << k יכפיל אתa 2פיk.
a = a >> k יחלק אתa 2פיk.
הזזה
#include <stdio.h>
int main()
{
printf ("%x", -1 << 4);
return 0;
}
Shayke Bilu SCE-Chapter-14-Bits and Bytes
65
...המשך
.1A * (B + C) = A * B + A * C
.2 A + 0 = A
.3 A | A = A
.4 A & 1 = A
.5 A * 0 = 0
.6 A | (B & C) = (A | B) & (A | C)
.7– (– A) = A
.8A + A A
Shayke Bilu SCE-Chapter-14-Bits and Bytes
נשווה אלגברה בוליאנית לאלגברה אריתמטית66
...המשך
.1A & A = A
.2A | (A & B) = A
.3A & (A | B) = A
.4A | !A = 1
.5A | !A 0
Shayke Bilu SCE-Chapter-14-Bits and Bytes
נשווה אלגברה בוליאנית לאלגברה אריתמטית67
עוד מספר התמרות בין אופרטורים
חוקיDeMorgan
A & B = !(!A | !B)
A | B = !(!A & !B)
xor ְו | על ידי&:
A ^ B = (!A & B) | (A & !B)
A ^ B = (A | B) & !(A & B)
Shayke Bilu SCE-Chapter-14-Bits and Bytes
68
^ -ו &: מספר זהויות
מצא את הזהויות השגויות :תרגיל
1. A ^ B = B ^ A
2. A & B = B & A
3. (A ^ B) ^ C = A ^ (B ^ C)
4. (A & B) & C = A & (B & C)
5. A & (B ^ C) = (A ^ B) & (A ^ C)
6. A ^ 0 = 0
7. A & 1 = A
8. A & 0 = 0
9. A ^ A = A Shayke Bilu SCE-Chapter-14-Bits and Bytes
69
חיבור וקטורים של ביטים
01001101 +
10000100
------------
11010001
0010101 +
1101100
------------
0000001
Shayke Bilu SCE-Chapter-14-Bits and Bytes
70
של ביטים לוקטוריםמביטים
פעולות על וקטורים של ביטים
פעולות מבוצעות לחוד עבור כל ביט(bitwise)
and &
01101001
& 01010101
01000001
or |
01101001
| 01010101
01111101
xor ^
01101001
^ 01010101
00111100
not !
! 01010101
10101010
Shayke Bilu SCE-Chapter-14-Bits and Bytes
71
ייצוג וחישוב על קבוצות
וקטור ביטים ברוחב : ייצוגw יכול לייצג תתי קבוצות של{0,…, w–1}
aj = 1 if j A
01101001 { 0, 3, 5, 6 }
76543210
01010101 { 0, 2, 4, 6 }
76543210
פעולות
& Intersection 01000001 { 0, 6 }
| Union 01111101 { 0, 2, 3, 4, 5, 6 }
^ Symmetric difference 00111100 { 2, 3, 4, 5 }
! Complement 10101010 { 1, 3, 5, 7 }
Shayke Bilu SCE-Chapter-14-Bits and Bytes
72
C -פעולות על ביטים ב
קיימות ב ^ ,! ,| ,&הפקודות- C
רלבנטי לכל ה- integers : long, int, short, char
מופעל על המספר בייצוגו הבינארי
מופעל בנפרד על כל ביט
דוגמאות על משתנה מסוגchar:
~0x41 --> 0xBE
~010000012 --> 101111102
~0x00 --> 0xFF
~000000002 --> 111111112
0x69 & 0x55 --> 0x41
011010012 & 010101012 --> 010000012
0x69 | 0x55 --> 0x7D
011010012 | 010101012 --> 011111012
:זכרו 416=01002
116=00012
Shayke Bilu SCE-Chapter-14-Bits and Bytes
73
(shifting)" ִזיַזה"פעולות
x << y : הזזה שמאלה•
מקומות yשמאלה ב xהזז וקטור •
מימין 0 –זרוק ביטים משמאל ומלא ב •
x >> y :ימינההזזה •
מקומות yימינה ב xהזז וקטור •
זרוק ביטים מימין•
:שני מקרים•
משמאל 0 -במלא : (logical shift)הזזה לוגית •
שכפל הספרה השמאלית : (arithmetic shift)הזזה אריתמטית •
(msb) . 2משתמשים בזה בייצוג’s complement שעוד נלמד.
Shayke Bilu SCE-Chapter-14-Bits and Bytes
74
i-כיצד נגלה את הביט ה
ערך הסיבית הימנית שלint x:
int res;
res = x & 1;
מקובל להשתמש במסכות .
מציאת הסיבית ה- k + 1 מימין:
int mask;
mask = 1 << k;
res = (x & mask) != 0;
Shayke Bilu SCE-Chapter-14-Bits and Bytes
75
C -פעולות לוגיות ב :ובניגוד לכך
פעולות לוגיות ב– C &&, ||, !:
‘0’ אמת' 1, 'מייצג שקר
אמת'הוא 0 –כל מספר שונה מ'
1או 0פעולה בוליאנית תמיד מחזירה
דוגמאות על משתנה מסוגchar:
!0x41 --> 0x00
!0x00 --> 0x01
!!0x41 --> 0x01
0x69 && 0x55 --> 0x01
0x69 || 0x55 --> 0x01
Shayke Bilu SCE-Chapter-14-Bits and Bytes
76
סיכום ביניים –סיביות וביטים
זה סיביות ובתים הכל...
טקסט, תוכניות, מספרים
מחשבים שונים משתמשים בייצוגים שונים
ייצוג, סדר בתים, רוחב מילה
לוגיקה פסוקית מהווה כלי יסודי בהבנת פעולות המחשב
היא מאפשרת חישובים מעל וקטורים של , מצד אחד
ביטים
ניתן לממש אותה בחומרה, מצד שני . Shayke Bilu SCE-Chapter-14-Bits and Bytes
77
ייצוג מספרים במחשב
Shayke Bilu SCE-Chapter-14-Bits and Bytes
ביטים של כרצף נשמר במחשב מידע פריט כל
1 או 0 הערכים את ורק אך לקבל יכול ביט
בית מהווה ביטים שמונה של רצף (byte) יחידת שהיא
כתובת בעלת ביותר הקטנה הזיכרון
בשפת C ביטים עם לעבודה אופרטורים מוגדרים.
מספרים המייצגים משתנים על נעשית ביטים עם עבודה
(char, short, int, long) !!!בלבד שלמים
ה המשתנה בגרסת גם להשתמש ניתן-unsigned אחד כל של
.מהם
79
ייצוג מספרים בבסיסים שונים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
(בינארי בסיס) 2 בסיס על מיוצגים במחשב מספרים
י"ע (8 בסיס) אוקטלי בייצוג למספר להתייחס ניתן
.המספר לפני 0 הוספת
34 המספר את מייצג באוקטלי 042 המספר לדוגמה
עשרוני בבסיס
הוא רלבנטי המרה תו %o
80
פעולות חישוב על ביטים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
הוספת י"ע (16 בסיס) הקסדצימלי בייצוג למספר להתייחס ניתן
0x 0 המספר לדוגמה .המספר לפניx42 66 המספר את מייצג
.עשרוני בבסיס
הוא רלבנטי המרה תו %x (או X% גדולות אותיות לקבלת)
את לייצג נדרש ביטים של באופרטורים להשתמש מנת על
בינארי בייצוג המספר
ביט מול ביט מבוצעות ביטים על חישוב פעולות
בגרסת להשתמש עדיף כלל בדרך unsigned המשתנה של
81
המרה מבינארי לעשרוני
Shayke Bilu SCE-Chapter-14-Bits and Bytes
אלגוריתם המרה של מספר בבסיס בינארי למספר בבסיס עשרוני:
בחזקת האינדקס של מיקומה 2שהוא " משקל"לכל ספרה בייצוג יש
(0אינדקס מתחיל מימין ומהערך )במספר
י מיקומה בייצוג "כפול כל ספרה במשקלה המתאים עפ
הערך של המספר העשרוני הוא סכום המכפלות, הבינארי
8 7 6 5 4 3 2 1 0 אינדקס
256 128 64 32 16 8 4 2 1 משקל
8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 2 חישוב
82
המרה מבינארי לעשרוני
Shayke Bilu SCE-Chapter-14-Bits and Bytes
הייצוג הבינארי הבא, לדוגמה :
00001101
המיקומים הם:
1=1 ,0=2 ,1=4 ,1=8 ,0=16 ,0=32 ,0 =64 ,0=128
13ל מייצג את המספר "הייצוג הנ:
1*1+0*2+1*4+1*8+0*16+0*32+0*64+0*128 =
1*1 + 1*4 + 1*8 =
1+4+8 = 13
.ממספר בינארי הנקלט כמחרוזת, 10בבסיס , המייצרת מספר דצימלי תוכניתכתוב
83
המרה מעשרוני לבינארי
Shayke Bilu SCE-Chapter-14-Bits and Bytes
אלגוריתם המרה של מספר בבסיס עשרוני למספר בבסיס
:בינארי
0כל עוד המספר אינו
2-חלק את המספר ב
שמור את השארית
הוא אוסף , משמאל לימין, הייצוג הבינארי של המספר
.השאריות מהסוף להתחלה
הן מקבלות את , כאשר יש מצב שחלק מהספרות חסרות
.0הערך
84
המרה מעשרוני לבינארי
Shayke Bilu SCE-Chapter-14-Bits and Bytes
00001000: בייצוג בינארי הוא 8המספר –לדוגמה
מספר שארית
0 8
0 4
0 2
1 1
0
85
(8בסיס ) אוקטליייצוג
Shayke Bilu SCE-Chapter-14-Bits and Bytes
0-7הספרות , ספרות 8קיימות רק אוקטליבבסיס
ספרות בינאריות 3י "מיוצגת ע אוקטליכל ספרה בבסיס
י הטבלה המוצגת בשקף הבא"וזאת עפ
ספרות 3כל – לאוקטליבהמרה של מספר מבינארי
האוקטליבייצוג הבינארי הופכות לספרה אחת בייצוג
86
(8בסיס ) אוקטליייצוג
Shayke Bilu SCE-Chapter-14-Bits and Bytes
לדוגמה הייצוג הבינארי
00001101: של המספר
.אוקטליבבסיס 15הוא המספר
לעשרוני מאוקטליבהמרה
ניתן להשתמש בשיטת סכום
המשקלים כאשר משקלי הספרות
('וכו 64 ,8, 1) הם
ייצוג בינארי ספרה
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
87
(16בסיס )דצימלי -הקסהייצוג
Shayke Bilu SCE-Chapter-14-Bits and Bytes
ספרות 16דצימלי קיימות -הקסהבבסיס ,
A-Fוהספרות 0-9הספרות
ספרות 4י "דצימלי מיוצגת ע-הקסהכל ספרה בבסיס
:י הטבלה הבאה"בינאריות עפ
ספרות בייצוג 4 כל –דצימלי -להקסהבהמרה מבינארי
דצימלי-ההקסההבינארי הופכות לספרה אחת בייצוג
ספרה מיוצגת כל –דצימלי לבינארי -מהקסהבהמרה
י רביעיית הספרות הבינאריות"ע
88
(16בסיס )דצימלי -הקסהייצוג
Shayke Bilu SCE-Chapter-14-Bits and Bytes
לדוגמה הייצוג הבינארי:
11100011
3הוא המספרE
דצימלי -הקסהבבסיס(0xE3)
דצימלי לעשרוני ניתן להשתמש בשיטת -מהקסהבהמרה
כאשר משקלי הספרות הם, סכום המשקלים:
('וכו 256, 16, 1)
89
רשימת האופרטורים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
ניתן להשתמש באופרטורים הבאים לקיצור= : ,&=,| =^
משמעות סימן
אופרטור
דוגמא הסבר
& AND הביטים שני אם ורק אם 1 יהיה התוצאה ביט
1-ל שווים בפעולה המקבילים
2&3=2
| OR משני אחד לפחות אם 1 יהיה התוצאה ביט
1-ל שווה בפעולה המקבילים הביטים
2|3=3
^ XOR אחד בדיוק אם ורק אם 1 יהיה התוצאה ביט
1-ל שווה בפעולה המקבילים הביטים משני
(מזה זה שונים הביטים כלומר)
2^3=1
91
רשימת האופרטורים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
משמעות סימן
אופרטור
דוגמא הסבר
>> Shift Left האופרנד) המקור משתנה של הביטים את מזיז
ערך י"עפ) שמאלה עדיםצ מספר (השמאלי
התאים את מאפסת הפעולה .(מימין האופרנד
.2 פי לכפל שקולה הפעולה .מימין ריקים שנותרו
2<<1=4
<< Shift Right האופרנד) המקור משתנה של הביטים את מזיז
האופרנד ערך י"עפ) ימינה עדיםצ מספר (השמאלי
.(מימין
.מערכת תלוי הוא הריקים התאים מילוי אלגוריתם
.2 פי לחלוקה שקולה הפעולה
2>>1=1
! Complement 0-ל אותו והופך 1 :הביט של ערך את מחליף
1-ל להפוך 0 -ל גורם הפוך במקרה
!2=253
92
טבלאות פעולה
Shayke Bilu SCE-Chapter-14-Bits and Bytes
& (and) Bit 2 Bit 1
0 0 0
0 1 0
0 0 1
1 1 1
| (or) Bit 2 Bit 1
0 0 0
1 1 0
1 0 1
1 1 1
^ (xor) Bit 2 Bit 1
0 0 0
1 1 0
1 0 1
0 1 1
AND OR XOR
93
(mask)שימוש במסכות
Shayke Bilu SCE-Chapter-14-Bits and Bytes
נהוג לייצר מסכות שישמשו להדלקה או כיבוי של ביט :
במיקום אותו נרצה להאיר 1יכולה להכיל
בעזרת שימוש באופרטורAND (& )נוכל , בין המספר הרצוי והמסכה
לדעת מהו הביט הנמצא במספר במיקום הרצוי
לדוגמה
00001101 & 00001000 = 00001000
00000101 & 00001000 = 00000000
מכך נסיק:
0סימן שהביט הרצוי היה , 0אם התוצאה שהתקבלה היא
1סימן שהביט הרצוי היה , 0-שונה מאם התוצאה שהתקבלה
94
דוגמה לפונקציה להדפסת ייצוג בינארי
Shayke Bilu SCE-Chapter-14-Bits and Bytes
void printBits(unsigned int number)
{
unsigned int mask = 1<<31, result; int i;
for(i=0;i<32;i++)
}
result = number & mask;
if(result)
putchar('1');
else
putchar('0');
mask >>=1;
{
{
95
דוגמה לפונקציה להדפסת ייצוג עשרוני
Shayke Bilu SCE-Chapter-14-Bits and Bytes
void printNum(char mis[])
}
int i,sum=0,place=1;
for(i=31;i>=0;i--)
}
if(mis[i] == '1')
sum+= (place);
place*=2;
{
printf("The number is: %d",sum);
{
96
דוגמה לתוכנית הראשית
Shayke Bilu SCE-Chapter-14-Bits and Bytes
int main()
}
int num; char mis[32];
printf("Enter integer number:\n");
scanf("%d",&num);
printBits(num);
printf("Enter binary number:\n");
scanf("%s",&mis);
printBits(mis);
return 0;
}
97
תרגילים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
של הבינארי הייצוג את ומדפיסה מספר המקבלת פונקציה כתוב1.
.המפעיל בחירת י"ע תבוצע המרה איזו הבחירה ולהיפך המספר
0) 2-ב מתחלק הוא אם 1 ומחזירה מספר המקבלת פונקציה כתוב2.
.ביטים של ובאופרטורים בינארי בייצוג להשתמש יש .(לא אם
המספר את מעלה הפונקציה ,שלם מספר המקבלת פונקציה כתוב3.
.שנקלט השלם המספר בחזקת 2
.23 שהיא , 8 התוצאה את התוכנית תחזיר 3 המספר עבור
25 שהוא 32 המספר את תחזיר הפונקציה 5 המספר עבור
99
תרגילים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
כמה אחדות שלם או תו ומחזירה כתוב פונקציה המקבלת מספר 4.
את הפונקציה יש לדאוג להתאים . מופיעות בייצוג הבינארי שלו
(unsigned char/int) לסוג המשתנה
ספרות ומדפיסה את הייצוג 5כתוב פונקציה המקבלת מספר בן 5.
.דצימלי של המספר-ההקסה
. ביטים ימינה int 4כתוב תוכנית המזיזה משתנה מסוג 6.
מה ערכי ארבעת הביטים . הדפס את המספר לפני ואחרי ההזזה
? (י אלגוריתם ההזזה"שמולאו ע)השמאליים ביותר
signed/unsignedבדוק את התשובה על משתנים
100
לדוגמא 4פתרון תרגיל
Shayke Bilu SCE-Chapter-14-Bits and Bytes
void countOne(unsigned int num)
{
int i, res=0;
unsigned int mask=1, check;
for(i=0;i<sizeof(int)*8;i++)
{
check= mask & num;
if(check)
res++;
mask<<=1;
}
printf("The number has %d 1's in binary.\n",res);
}
101
תרגילים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
unsigned charמשתנים מסוג 2כתוב תוכנית המקבלת 7.
.אחד unsigned shortואורזת אותם בתוך
הבית השמאלי בתוצאה יהיה המספר הראשון והבית , כלומר
.הימני יכיל את המספר השני
2-ל shortהמפרקת מספר מסוג , כתוב את הפונקציה ההופכית8.
המספר : פרמטרים 2הפונקציה מקבלת . charמספרים מסוג
יסמן 1)הארוז ומספר נוסף המציין את מיקום המספר הרצוי
הפונקציה תחזיר (. את המספר הימני 2-את המספר השמאלי ו
. unsigned charאת המספר המבוקש מסוג
102
דוגמא אחרת לתוכנית המרה בין בסיסים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
#include <stdio.h>
void main(void)
}
char base_digits[16] = { '7' ,'6' ,'5' ,'4' ,'3' ,'2' ,'1' ,'0,'
,'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
int converted_number[64];
long int number_to_convert;
int next_digit, base, index=0;
/* get the number and base */
printf("Enter number and desired base: ");
scanf("%ld %i", &number_to_convert, &base);
103
דוגמא אחרת לתוכנית המרה בין בסיסים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
/* convert to the indicated base */
while (number_to_convert != 0)
}
converted_number[index] = number_to_convert % base;
number_to_convert = number_to_convert / base;
++index;
{
/* now print the result in reverse order */
--index; /* back up to last entry in the array */
printf("\nConverted Number = ");
for( ; index>=0; index--) /* go backward through array */
}
printf("%c", base_digits[converted_number[index]]);
{
printf("\n");
{
104
תרגילים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
עליך לעבור על הפונקציה בהנחה כי . לפניך פונקציה המבצעת משימה מסוימת9.
.ולרשום מה יודפס בסופה Y=6 -ו X=10המספרים שנקטו בראש הפונקציה הם
#include <stdio.h> void Print(int x, int d) {
char buffer[33]; int i=0; for (;d>0;d--) }
buffer[i++] = '0'+ (x & 1); x >>= 1; {
while(index >0 ) printf("%c",buffer[--i]); {
105
תרגילים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
עליך לעבור על התוכנית . הכוללת פונקציה המבצעת משימה מסוימת תוכניתלפניך 10.
.ולרשום מה יודפס בסופה
int mystery(unsigned char bits) }
int total=0, i; for(i=1;i<=bits;i++){
bits<<=2; total++;}
return (total); {
int main() }
unsigned int number=8; printf(“The answer is: %d\n", mystery(number<<1)); {
106
סיכום -סיביות וביטים
Shayke Bilu SCE-Chapter-14-Bits and Bytes
משמעות ייצוג מידע? מהם סיביות? ביטיםמדוע
אוקטאלי/ דצימלי -הקסה/ ייצוג מידע בינארי
ייצוג של בתים
מספרים
תווים ומחרוזות
פקודות(instructions)
פעולות ברמת הביטים
יחסי , בוליאניתלוגיקהor, and, not, xor
הזזות ימינה ושמאלה של ביטים והמשמעות של זה.
נכתוב זאת בתוכניות כיצדC ?
107