Top Banner
Shayke Bilu SCE-Chapter-14-Bits and Bytes פרק14 סיביות/ ביטים ובתיםBits & Bytes שייקה בילו יועץ ומרצה בכיר למדעי המחשב וטכנולוגית מידע מומחה למערכות מידע חינוכיות, אקדמיות ומנהליות קורס יסודות התכנות בשפתC 1
108

C Programming chapter 14

Apr 20, 2023

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C Programming chapter 14

Shayke Bilu SCE-Chapter-14-Bits and Bytes

14פרק

Bits & Bytesביטים ובתים /סיביות

שייקה בילו

יועץ ומרצה בכיר למדעי המחשב וטכנולוגית מידע

ומנהליותאקדמיות , מומחה למערכות מידע חינוכיות

Cקורס יסודות התכנות בשפת

1

Page 2: C Programming chapter 14

רשימות מקושרות -חזרה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

ידוע לכל מתכנת כי במערכות רבות קיימת תחלופה תכופה של

(. מחיקה והוספה בקצב מהיר)אובייקטים

מערכת לרישום סטודנטים , למשל במערכת לניהול ספרים בספריה

.'וכומערכות ניווט , 6מערכת מעקב במצלמות כביש , באוניברסיטה

יש להעתיק את , במידה ומייצגים את הנתונים באמצעות מערך

" לצופף"-ו, כל המערך מחדש כל פעם כשצריך להוסיף משהו

.את כל המערך כשצריך למחוק משהו מהאמצע

זה לא יעיל.

זה לא נוח.

זה לא סביר.

2

Page 3: C Programming chapter 14

מקושרותרשימות -חזרה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

לעבודה עם רשימות גדולות שיש בהן שינויים תכופים

.משתמשים ברשימה מקושרת במקום להשתמש במערך

רשימה מקושרת , שהוא אוסף של תאים רצופים, בניגוד למערך

שכל אחד מהם כולל גם מצביע , היא אוסף של תאים לא רצופים

. לתא שאחריו ברשימה

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

.את שאר תאי הרשימה

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

. וכן הלאה, וממנו להתקדם לתא הבא, שלה

המוסכמה היא שהתא האחרון ברשימה מצביע עלNULL.

3

Page 4: C Programming chapter 14

מקושרת של מספרים רשימה -חזרה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

3 5 7 9

3 5 7 9

:לעומת מערך

שדה מידע

מצביע

שדה מידע

מצביע

שדה מידע

מצביע

שדה מידע

מצביע

סוף

רשימה

התחלת

רשימה

4

Page 5: C Programming chapter 14

איברים לרשימההוספת -חזרה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

(שיש בה תוספות ומחיקות)מעצם טבעה של רשימה מקושרת ,

. מספר האיברים בה לא ידוע מראש ואין עליו חסם

אנחנו נדרשים להוסיף איברים במהלך ריצת התוכנית.

תוספת איבר לרשימה מקושרת תיעשה בעזרת הקצאה דינאמית

:י"הקצאה דינאמית של איבר אחד נעשית במקרה זה ע. שלו

Item *ptr;

ptr = (Item *) malloc (sizeof(Item));

נתאר פונקציה להוספת איבר כזה לרשימה.

5

Page 6: C Programming chapter 14

C -רשימות מקושרות במימוש -חזרה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

רשימה מקושרת איננה טיפוס משתנה שקיים , בניגוד למערך

.Cבשפת

עלינו לבנות אותה , כדי לשמור נתונים ברשימה מקושרת

ולממש בעצמנו את הפעולות אותן נבקש לבצע על , בעצמנו

(.'וכו, חיפוש איבר, מחיקת איבר, כמו הוספת איבר)איבריה

לעינו להקפיד כי האיבר האחרון ברשימה מצביע ל- NULL

ואילו האיבר הראשון מצביע לשני אחרת אין לנו בעצם רימה

.מקושרת

6

Page 7: C Programming chapter 14

C -רשימות מקושרות במימוש -חזרה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

רשימה מקושרת היא למעשה פשוט אוסף האיברים שלה

(. שמחוברים ביניהם)

צריך להראות איך לממש איבר אחד ברשימה ואיך לקשר את

.האיברים

כדי לעבוד עם רשימה מקושרת יספיק לשמור , כפי שאמרנו קודם

כי ממנו אפשר להתקדם , את כתובת האיבר הראשון שלה

. לאחרים

קיימות רשימות מקושרות דו כיווניות וסיבוביות בהן האיבר

.האחרון מצביע על הראשון וכך נוצר מעגל איברים

7

Page 8: C Programming chapter 14

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

Page 9: C Programming chapter 14

איבר ברשימהמציאת -חזרה

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

Page 10: C Programming chapter 14

רשימה מקושרתשחרור -חזרה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

בסיום השימוש ברשימה נרצה לשחרר את כל הזיכרון שהיא

. משתמשת בו

בשונה ממערך שהוקצה דינאמית ,free של ראש הרשימה משחרר רק את

.האיבר הראשון

י "כל אחד מאיברי הרשימה הוקצה עmalloc ו, נפרד- free משחרר את

.אחת בדיוק mallocמה שהוקצה בפקודת

נכתוב פונקציה שמקבלת מצביע לראש הרשימה ועוברת

.ומשחררת את כל האיברים שהוקצו על ידי פונקציית ההוספה

10

Page 11: C Programming chapter 14

SCE-Chapter-14-Bits and Bytes Shayke Bilu

?הקודם השעורשאלות על

11

Page 12: C Programming chapter 14

נושאים מבוא לסיביות ובתים

10מדוע לא בסיס ? מדוע להשתמש בסיביות וביטים?

דצימלי-הקסה/ ייצוג מידע בינארי

ייצוג של בתים

מספרים

תווים ומחרוזות

פקודות(instructions)

פעולות ברמת הביטים

לוגיקה בוליאנית

כיצד הדבר נראה בתוכניותC ?

Bits and Bytes - ובתיםסיביות

Shayke Bilu SCE-Chapter-14-Bits and Bytes

12

Page 13: C Programming chapter 14

למעשה הוא ,בקרים-מיקרו ושל ,מחשבים של זיכרון

אחד שכל זעירים "תאים" :ביטים של ארוך אחד רצף

מראש מוגדרים מצבים משני באחד להיות יכול מהם

כל ,משתנה כל ."(1"-ו "0" מכנים אנחנו אותם מצבים)

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

.הזה הרצף פני על קצר קטע

Bits and Bytes – מבוא לסיביות ובתים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

13

Page 14: C Programming chapter 14

להסתיר מאמצים עושות המודרניות התכנות שפות רוב

-מיקרו עם כשעובדים נדרשת היא אבל ,הזאת העובדה את

.בקרים

ייצוג :עיקריים נושאים-תת לשני מתחלק הביטים נושא

פי על אף .טכניים נושאים והם בוליאנית ולוגיקה ,בינארי

.קריטיים הכי הנושאים אלה שניים הנושאים כל מבין ,כן

Bits and Bytes – מבוא לסיביות ובתים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

14

Page 15: C Programming chapter 14

מספרים כמייצגי ביטים:

של קצר רצף ניקח אם .1 או 0 להכיל שיכול תא הוא ביט

:לזה דומה משהו נראה ,בזיכרון אקראי ממקום ביטים

?אומר זה מה .0111001010011010

?מכירים שאנחנו למספרים מתורגם כזה דבר איך

Bits and Bytes – מבוא לסיביות ובתים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

15

Page 16: C Programming chapter 14

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

יכולה והיא ,"האחדות ספרת" היא ביותר הימנית הספרה

.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

Page 17: C Programming chapter 14

שכל לזהות כדי במתמטיקה גאון להיות צריך לא

:10 של חזקות הם האלה המספרים

100 – 101 – 102 – 103 – 104- 105 – 106 – …

בחזקת-בעשר למעשה מוכפלת ספרה כל ,כלומר-

.מאפס מתחילה המיקומים ספירת כאשר ,שלה-המיקום

שנמצאת 1 הספרה ,321 הוא המספר אם ,לדוגמה

.(1)= אפס בחזקת בעשר תוכפל אפס במיקום

Bits and Bytes – מבוא לסיביות ובתים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

17

Page 18: C Programming chapter 14

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

Page 19: C Programming chapter 14

בינארי בבסיס שנכתב מספר לפענח כדי ,אומרת זאת,

שמשמאלה זו את ,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

Page 20: C Programming chapter 14

היא ביותר הבסיסית הנתונים יחידת ,התכנות שפות בכל

.ביטים שמונה שכולל ((byte)הבייט

אחד בייט באמצעות לייצג שאפשר המספרים טווח מה?

זה וכמה 00000000 זה כמה ,אחרות במילים

11111111?

255-ו 0 הן התשובות :הפעם החישוב את לכם אחסוך.

Bits and Bytes – מבוא לסיביות ובתים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

20

Page 21: C Programming chapter 14

ואנחנו ,255 שערכו בייט מטיפוס משתנה לנו שיש נניח

כל .999-ל 1 להוסיף כמו זה ,מתמטית ,אחד לו מוסיפים

.משמאל 1 לנו ונוסף ,מתאפסות הספרות

אפשרות ואין ביטים 8-ל אותנו מגביל שהבייט מכיוון אבל

אפסים שכולם ביטים עם נשארים אנחנו ,משמאל 1 להוסיף

.בלבד

באותו .הלאה וכן ,1 נקבל 255-ל 2 נוסיף אם !לאפס חזרנו

כי לזכור יש) אפס שערכו מבייט 1 להפחית ננסה אם ,אופן

.255-ל נחזור (שליליים ערכים לקבל יכול אינו בייט

Bits and Bytes – מבוא לסיביות ובתים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

21

Page 22: C Programming chapter 14

? 10מדוע מחשבים לא עובדים בבסיס

המחשב האלקטרוני הראשוןENIAC 10 -השתמש ב

סרבול אדיר ובזבוז זמן , שפורפרות ואקום לכל ספרה

.וחשמל

הנובע מקושי לאגור ולהעביר מידע קושי טכני

רמות שונות של אינפורמציה 10דרוש דיוק גבוה כדי לקודד

.על מוליך אחד

מסובך לבצע חישובים לוגיים

העלאה בחזקה והוצאת שורש ו, חילוק, כפל, חיסור, חיבור...

Shayke Bilu SCE-Chapter-14-Bits and Bytes

22

Page 23: C Programming chapter 14

ייצוג בינארי

מימוש בחומרה

קל לאגור עם אלמנטיםbi-stable

העברה אמינה גם כשהמוליכים לא אמינים ומדויקים

0.0V

0.5V

2.8V

3.3V 0 1 0

Shayke Bilu SCE-Chapter-14-Bits and Bytes

23

Page 24: C Programming chapter 14

ייצוג בינארי

(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

Page 25: C Programming chapter 14

ייצוג מספרים בבסיסים שונים

ייצוגhexadecimal:

16בסיס

ואותיות 9 -0ספרות‘A’ - ‘F’

ב– C כתובFA1D37B16 כך:

0xFA1D37Bאו

0xfa1d37b

Shayke Bilu SCE-Chapter-14-Bits and Bytes

25

Page 26: C Programming chapter 14

ייצוג מספרים בבסיסים שונים

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

Page 27: C Programming chapter 14

ייצוג מספרים בבסיסים שונים

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

Page 28: C Programming chapter 14

טווח של ערכי בתים: דוגמה

סיביות 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

Page 29: C Programming chapter 14

SCE-Chapter-14-Bits and Bytes Shayke Bilu

?שאלות

29

Page 30: C Programming chapter 14

(machine words)מילים

רוחב מילה'לכל מחשב יש'

הגודל המוקצה למידע מסוגinteger (כולל כתובות.)

רוב המחשבים המתקדמים היום כבר עובדים עם פס

(בתים 8)סיביות 64כתובות ברוחב

מרחב הכתובות 1.8 X 1019 18 בתים הקסה.

32כמו ברוחב פס של יגה'בגולא בהקסהמרחב הכתובת נמדד

GB4.3 -סיביות שהגביל את המרחב ל

לתנועה מרובת מידע , כרגע, רוחב פס זה מספיק בהחלט

.במערכות הן של מחשבים מרובי ליבות והן אחרים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

30

Page 31: C Programming chapter 14

ארגון הזיכרון לפי בתים

(וירטואליות)' מדומות'תוכניות מתייחסות לכתובות •

:באופן אבסטרקטי•

בתיםגדול של מערך 1.

זיכרונותממומש עם היררכיה שלמה של סוגי בפועל 2.

רכיבי חומרה קובעים את המיפוי + (compiler)מהדר 3.

.לזיכרון הפיזי

.את ייצוג הכתובות במערך זהנראה 4.

Shayke Bilu SCE-Chapter-14-Bits and Bytes

31

Page 32: C Programming chapter 14

ייצוג מידע

גודל בבתים של אובייקטים שונים של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

Page 33: C Programming chapter 14

סידור המידע

ניתן לסדר את הבתים בתוך מלים מימין לשמאל או

... להפך

אין הסכמה ?מה מקובל

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

Page 34: C Programming chapter 14

דוגמה

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

Page 35: C Programming chapter 14

כיצד נראה איך המידע מיוצג

תוכנית להדפסת ייצוג בבתים:

#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

Page 36: C Programming chapter 14

כיצד נראה איך המידע מיוצג

תוכנית להדפסת ייצוג בבתים:

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

Page 37: C Programming chapter 14

ייצוג פקודות מכונה

פקודות מקודדות כבתים

מחשביRISC כגוןSun משתמשים באוסף קטן של

:פקודות

4 בתים מספיקים לייצוג כל הפקודות.

מחשביCISC כגון ה- PC משתמשים בקבוצה גדולה

:של הוראות

נעזרים בגודל משתנה של פקודה.

Shayke Bilu SCE-Chapter-14-Bits and Bytes

37

Page 38: C Programming chapter 14

ייצוג פקודות

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

Page 39: C Programming chapter 14

SCE-Chapter-14-Bits and Bytes Shayke Bilu

?שאלות

39

Page 40: C Programming chapter 14

? מה עכשיו

כשראינו שאת כל סוגי המידע שהמחשב משתמש בהם, עכשיו ,

..., 1ו 0ניתן לייצג על ידי שימוש בתווים

נרצה לראות איך המחשב יכול לבצע חישובים עם מידע זה.

עלינו להיזכר בלוגיקה פסוקית, לשם כך.

לוגיקה בוליאנית מבוססת על מצבי אמת == לוגיקה פסוקית

י התנאים "שקר ובדיקתם ביחס שבין שני איברים ומעלה ע

:הבוליאניים הבאים

And - וגם

Or - או

Xor - או בלעדי

Not - שלילה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

40

Page 41: C Programming chapter 14

(בוליאנית)לוגיקה פסוקית

פותחה על ידי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

Page 42: C Programming chapter 14

ו ’|‘ = ’+‘נציב‘*’ = ‘&’.

קבעו אם –עבור כל אחד מהביטויים הבאים : תרגיל .נכון המקבילהביטוי

( תכונה של פעולות בינאריות)קומוטטיביות:

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

Page 43: C Programming chapter 14

שפת C סיביות על פעולות לבצע מאפשרת (bitwise

operations), האופרנדים של הסיביות על פעולות שהן:

פעולת AND האופרטור ידי-על המסומנת &.

פעולת OR האופרטור ידי-על המסומנת |.

פעולת NOT האופרטור ידי-על המסומנת ~.

פעולת XOR האופרטור ידי-על המסומנת ^ .

האופרטור ידי-על המסומנת שמאלה הזזה פעולת >> .

האופרטור ידי-על המסומנת ימינה הזזה פעולת << .

בינאריים אופרטורים הם סיביות על הפועלים האופרטורים כל

שהוא NOT האופרטור למעט ,(אופרנדים שני לקבל המצפים)

.(אחד אופרנד לקבל המצפה)אופרטור

פעולות על סיביות

Shayke Bilu SCE-Chapter-14-Bits and Bytes

43

Page 44: C Programming chapter 14

הפעולה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

Page 45: C Programming chapter 14

אם נבחן את טבלת האמת של הפעולהAND , נבחין

:בתכונות הבאות

כשמפעילים על סיבית מסוימתb עם &את הפעולה

.אז הסיבית לא משתנה, 1סיבית

b & 1 = b

כשמפעילים על סיבית מסוימתb עם & את הפעולה

.אז הסיבית מתאפסת, 0סיבית

b & 0 = 0

ANDהפעולה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

45

Page 46: C Programming chapter 14

לַמֵסך מנת על & בפעולה להשתמש שניתן היא המסקנה (to

mask) של הייצוג משאר אותה ולבודד ,מסוימת סיבית

.המספר

שבמשתנה נניח :לדוגמא num ואנחנו ,שלם 'מס מאוחסן

קוד קטע הנה .מימין הרביעית הסיבית מהי לדעת מעוניינים

:מתאים

if (num & 8 != 0)

printf (“הסיבית הרביעית מימין היא דלוקה”);

else

printf (“הסיבית הרביעית מימין היא כבויה”);

ANDהפעולה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

46

Page 47: C Programming chapter 14

הפעולה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

Page 48: C Programming chapter 14

הפעולה של האמת טבלת את נבחן אם OR, נבחין

:הבאות בתכונות

מסוימת סיבית על כשמפעילים b עם | הפעולה את

.נדלקת הסיבית אז ,1 סיבית

b | 1 = 1

מסוימת סיבית על כשמפעילים b עם | הפעולה את

.שינוי ללא נותרת הסיבית אז ,0 סיבית

b | 0 = b

ORהפעולה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

48

Page 49: C Programming chapter 14

להדליק מנת על | בפעולה להשתמש שניתן היא המסקנה

.אחרות סיביות לשנות מבלי ,מבוקשות סיביות

שבמשתנה נניח :לדוגמא num ואנחנו ,שלם 'מס מאוחסן

.מימין הרביעית הסיבית את להדליק מעוניינים

מתאימה הוראה הנה:

num = num | 8;

המקוצרת ההוראה גם קיימת &=.

ORהפעולה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

49

Page 50: C Programming chapter 14

הפעולה של נוספות תכונות OR:

מסוימת סיבית על כשמפעילים b עם | הפעולה את

.משתנה לא הסיבית אז ,עצמה

b | b = b

מסוימת סיבית על כשמפעילים b עם | הפעולה את

.נדלקת הסיבית אז ,ההפוכה הסיבית

b | ~b = 1

Shayke Bilu SCE-Chapter-14-Bits and Bytes

50

ORהפעולה

Page 51: C Programming chapter 14

מה יהיה הפלט של קטע הקוד הבא:

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הפעולה

Page 52: C Programming chapter 14

הפעולה NOT זהה והיא ,~ ידי-על מסומנת סיביות על

.! ידי-על המסומנת הבוליאנית NOT לפעולה

הפעולה של האמת טבלת ~:

מתהפכת היא ,סיבית על ~ פעולת כשמבצעים ,כלומר,

.לאפס מאחד או ,לאחד מאפס הופך ערכה ,כלומר

NOTהפעולה

1 =0~

0 =1~

Shayke Bilu SCE-Chapter-14-Bits and Bytes

52

Page 53: C Programming chapter 14

הבא הקוד קטע של הפלט יהיה מה:

int num = 72;

printf (“%d”, ~num);

.-73 יהיה זה במקרה הפלט

נרשום אם הפלט יהיה ומה %u במקום %d?

של שגודלו בהנחה) 65,463 יהיה הפלט int בתים 2 הוא

.(בתים 4 ולא

NOTהפעולה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

53

Page 54: C Programming chapter 14

ברור שמתקיים~~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הפעולה

Page 55: C Programming chapter 14

הפעולה 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

Page 56: C Programming chapter 14

מה יהיה הפלט של קטע הקוד הבא:

unsigned int num = 72 ^ 184;

printf (“%u”, num);

240כלומר הפלט יהיה.

XORהפעולה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

56

Page 57: C Programming chapter 14

הפעולה של האמת טבלת את נבחן אם XOR, נבחין

:הבאות בתכונות

מסוימת סיבית על כשמפעילים b עם ^ הפעולה את

.מתהפכת הסיבית אז ,1 סיבית

b ^ 1 = ~b

מסוימת סיבית על כשמפעילים b עם ^ הפעולה את

.שינוי ללא נותרת הסיבית אז ,0 סיבית

b ^ 0 = b

Shayke Bilu SCE-Chapter-14-Bits and Bytes

57

XORהפעולה

Page 58: C Programming chapter 14

הבא הקוד קטע של הפלט יהיה מה?

int num1 = 72;

int num2 = num1 ^ -1;

printf (“%d %u”, num2, num2);

הפקודה גם קיימת =| , =& לפעולות בדומה ^= .

Shayke Bilu SCE-Chapter-14-Bits and Bytes

58

XORהפעולה

Page 59: C Programming chapter 14

הפעולה של נוספות תכונות XOR:

מסוימת סיבית על כשמפעילים b עם ^ הפעולה את

.מתאפסת הסיבית אז ,עצמה

b ^ b = 0

מסוימת סיבית על כשמפעילים b עם ^ הפעולה את

.נדלקת הסיבית אז ,ההפוכה הסיבית

b ^ ~b = 1

Shayke Bilu SCE-Chapter-14-Bits and Bytes

59

XORהפעולה

Page 60: C Programming chapter 14

הבא הקוד קטע של הפלט יהיה מה:

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הפעולה

Page 61: C Programming chapter 14

בפעולה מעניין שימוש 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הפעולה

Page 62: C Programming chapter 14

ידי שימוש בהוראות המקוצרות-או על:

void swap (int *num1, int *num2)

{

*num1 ^= *num2;

*num2 ^= *num1;

*num1 ^= *num2;

}

Shayke Bilu SCE-Chapter-14-Bits and Bytes

62

XORהפעולה

Page 63: C Programming chapter 14

בשפת C סיביות את להזיז המאפשרים אופרטורים קיימים

.ושמאלה ימינה הביטוי

והאופרטור (שמאלה בסיביות הזזה המבצע) << האופרטור זהו

ייכנסו שיתפנו למקומות .(ימינה בסיביות הזזה המבצע) >>

.אפסים

אופרנדים שני מקבלים האופרטורים שני:

להזיז יש שלו הסיביות שאת הביטוי זהו השמאלי האופרנד.

לבצע שצריך ההזזות 'מס זהו הימני האופרנד.

הזזה

Shayke Bilu SCE-Chapter-14-Bits and Bytes

63

Page 64: C Programming chapter 14

מה יהיה הפלט של קטע הקוד הבא?

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

Page 65: C Programming chapter 14

מה לדעתכם יהיה הפלט של קטע התכנית הבא?

האם זה יהיה הפלט בכל סביבת עבודה?

ניתן להשתמש באופרטורים של הזזה על מנת

לממש ביעילות כפל בחזקות של שתיים או חלוקה

:בחזקות של שתיים

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

Page 66: C Programming chapter 14

...המשך

.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

Page 67: C Programming chapter 14

...המשך

.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

Page 68: C Programming chapter 14

עוד מספר התמרות בין אופרטורים

חוקי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

Page 69: C Programming chapter 14

^ -ו &: מספר זהויות

מצא את הזהויות השגויות :תרגיל

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

Page 70: C Programming chapter 14

חיבור וקטורים של ביטים

01001101 +

10000100

------------

11010001

0010101 +

1101100

------------

0000001

Shayke Bilu SCE-Chapter-14-Bits and Bytes

70

Page 71: C Programming chapter 14

של ביטים לוקטוריםמביטים

פעולות על וקטורים של ביטים

פעולות מבוצעות לחוד עבור כל ביט(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

Page 72: C Programming chapter 14

ייצוג וחישוב על קבוצות

וקטור ביטים ברוחב : ייצוג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

Page 73: C Programming chapter 14

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

Page 74: C Programming chapter 14

(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

Page 75: C Programming chapter 14

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

Page 76: C Programming chapter 14

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

Page 77: C Programming chapter 14

סיכום ביניים –סיביות וביטים

זה סיביות ובתים הכל...

טקסט, תוכניות, מספרים

מחשבים שונים משתמשים בייצוגים שונים

ייצוג, סדר בתים, רוחב מילה

לוגיקה פסוקית מהווה כלי יסודי בהבנת פעולות המחשב

היא מאפשרת חישובים מעל וקטורים של , מצד אחד

ביטים

ניתן לממש אותה בחומרה, מצד שני . Shayke Bilu SCE-Chapter-14-Bits and Bytes

77

Page 78: C Programming chapter 14

SCE-Chapter-14-Bits and Bytes Shayke Bilu

?שאלות

78

Page 79: C Programming chapter 14

ייצוג מספרים במחשב

Shayke Bilu SCE-Chapter-14-Bits and Bytes

ביטים של כרצף נשמר במחשב מידע פריט כל

1 או 0 הערכים את ורק אך לקבל יכול ביט

בית מהווה ביטים שמונה של רצף (byte) יחידת שהיא

כתובת בעלת ביותר הקטנה הזיכרון

בשפת C ביטים עם לעבודה אופרטורים מוגדרים.

מספרים המייצגים משתנים על נעשית ביטים עם עבודה

(char, short, int, long) !!!בלבד שלמים

ה המשתנה בגרסת גם להשתמש ניתן-unsigned אחד כל של

.מהם

79

Page 80: C Programming chapter 14

ייצוג מספרים בבסיסים שונים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

(בינארי בסיס) 2 בסיס על מיוצגים במחשב מספרים

י"ע (8 בסיס) אוקטלי בייצוג למספר להתייחס ניתן

.המספר לפני 0 הוספת

34 המספר את מייצג באוקטלי 042 המספר לדוגמה

עשרוני בבסיס

הוא רלבנטי המרה תו %o

80

Page 81: C Programming chapter 14

פעולות חישוב על ביטים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

הוספת י"ע (16 בסיס) הקסדצימלי בייצוג למספר להתייחס ניתן

0x 0 המספר לדוגמה .המספר לפניx42 66 המספר את מייצג

.עשרוני בבסיס

הוא רלבנטי המרה תו %x (או X% גדולות אותיות לקבלת)

את לייצג נדרש ביטים של באופרטורים להשתמש מנת על

בינארי בייצוג המספר

ביט מול ביט מבוצעות ביטים על חישוב פעולות

בגרסת להשתמש עדיף כלל בדרך unsigned המשתנה של

81

Page 82: C Programming chapter 14

המרה מבינארי לעשרוני

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

Page 83: C Programming chapter 14

המרה מבינארי לעשרוני

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

Page 84: C Programming chapter 14

המרה מעשרוני לבינארי

Shayke Bilu SCE-Chapter-14-Bits and Bytes

אלגוריתם המרה של מספר בבסיס עשרוני למספר בבסיס

:בינארי

0כל עוד המספר אינו

2-חלק את המספר ב

שמור את השארית

הוא אוסף , משמאל לימין, הייצוג הבינארי של המספר

.השאריות מהסוף להתחלה

הן מקבלות את , כאשר יש מצב שחלק מהספרות חסרות

.0הערך

84

Page 85: C Programming chapter 14

המרה מעשרוני לבינארי

Shayke Bilu SCE-Chapter-14-Bits and Bytes

00001000: בייצוג בינארי הוא 8המספר –לדוגמה

מספר שארית

0 8

0 4

0 2

1 1

0

85

Page 86: C Programming chapter 14

(8בסיס ) אוקטליייצוג

Shayke Bilu SCE-Chapter-14-Bits and Bytes

0-7הספרות , ספרות 8קיימות רק אוקטליבבסיס

ספרות בינאריות 3י "מיוצגת ע אוקטליכל ספרה בבסיס

י הטבלה המוצגת בשקף הבא"וזאת עפ

ספרות 3כל – לאוקטליבהמרה של מספר מבינארי

האוקטליבייצוג הבינארי הופכות לספרה אחת בייצוג

86

Page 87: C Programming chapter 14

(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

Page 88: C Programming chapter 14

(16בסיס )דצימלי -הקסהייצוג

Shayke Bilu SCE-Chapter-14-Bits and Bytes

ספרות 16דצימלי קיימות -הקסהבבסיס ,

A-Fוהספרות 0-9הספרות

ספרות 4י "דצימלי מיוצגת ע-הקסהכל ספרה בבסיס

:י הטבלה הבאה"בינאריות עפ

ספרות בייצוג 4 כל –דצימלי -להקסהבהמרה מבינארי

דצימלי-ההקסההבינארי הופכות לספרה אחת בייצוג

ספרה מיוצגת כל –דצימלי לבינארי -מהקסהבהמרה

י רביעיית הספרות הבינאריות"ע

88

Page 89: C Programming chapter 14

(16בסיס )דצימלי -הקסהייצוג

Shayke Bilu SCE-Chapter-14-Bits and Bytes

לדוגמה הייצוג הבינארי:

11100011

3הוא המספרE

דצימלי -הקסהבבסיס(0xE3)

דצימלי לעשרוני ניתן להשתמש בשיטת -מהקסהבהמרה

כאשר משקלי הספרות הם, סכום המשקלים:

('וכו 256, 16, 1)

89

Page 90: C Programming chapter 14

SCE-Chapter-14-Bits and Bytes Shayke Bilu

?שאלות

90

Page 91: C Programming chapter 14

רשימת האופרטורים

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

Page 92: C Programming chapter 14

רשימת האופרטורים

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

Page 93: C Programming chapter 14

טבלאות פעולה

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

Page 94: C Programming chapter 14

(mask)שימוש במסכות

Shayke Bilu SCE-Chapter-14-Bits and Bytes

נהוג לייצר מסכות שישמשו להדלקה או כיבוי של ביט :

במיקום אותו נרצה להאיר 1יכולה להכיל

בעזרת שימוש באופרטורAND (& )נוכל , בין המספר הרצוי והמסכה

לדעת מהו הביט הנמצא במספר במיקום הרצוי

לדוגמה

00001101 & 00001000 = 00001000

00000101 & 00001000 = 00000000

מכך נסיק:

0סימן שהביט הרצוי היה , 0אם התוצאה שהתקבלה היא

1סימן שהביט הרצוי היה , 0-שונה מאם התוצאה שהתקבלה

94

Page 95: C Programming chapter 14

דוגמה לפונקציה להדפסת ייצוג בינארי

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

Page 96: C Programming chapter 14

דוגמה לפונקציה להדפסת ייצוג עשרוני

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

Page 97: C Programming chapter 14

דוגמה לתוכנית הראשית

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

Page 98: C Programming chapter 14

SCE-Chapter-14-Bits and Bytes Shayke Bilu

תרגילים

98

Page 99: C Programming chapter 14

תרגילים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

של הבינארי הייצוג את ומדפיסה מספר המקבלת פונקציה כתוב1.

.המפעיל בחירת י"ע תבוצע המרה איזו הבחירה ולהיפך המספר

0) 2-ב מתחלק הוא אם 1 ומחזירה מספר המקבלת פונקציה כתוב2.

.ביטים של ובאופרטורים בינארי בייצוג להשתמש יש .(לא אם

המספר את מעלה הפונקציה ,שלם מספר המקבלת פונקציה כתוב3.

.שנקלט השלם המספר בחזקת 2

.23 שהיא , 8 התוצאה את התוכנית תחזיר 3 המספר עבור

25 שהוא 32 המספר את תחזיר הפונקציה 5 המספר עבור

99

Page 100: C Programming chapter 14

תרגילים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

כמה אחדות שלם או תו ומחזירה כתוב פונקציה המקבלת מספר 4.

את הפונקציה יש לדאוג להתאים . מופיעות בייצוג הבינארי שלו

(unsigned char/int) לסוג המשתנה

ספרות ומדפיסה את הייצוג 5כתוב פונקציה המקבלת מספר בן 5.

.דצימלי של המספר-ההקסה

. ביטים ימינה int 4כתוב תוכנית המזיזה משתנה מסוג 6.

מה ערכי ארבעת הביטים . הדפס את המספר לפני ואחרי ההזזה

? (י אלגוריתם ההזזה"שמולאו ע)השמאליים ביותר

signed/unsignedבדוק את התשובה על משתנים

100

Page 101: C Programming chapter 14

לדוגמא 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

Page 102: C Programming chapter 14

תרגילים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

unsigned charמשתנים מסוג 2כתוב תוכנית המקבלת 7.

.אחד unsigned shortואורזת אותם בתוך

הבית השמאלי בתוצאה יהיה המספר הראשון והבית , כלומר

.הימני יכיל את המספר השני

2-ל shortהמפרקת מספר מסוג , כתוב את הפונקציה ההופכית8.

המספר : פרמטרים 2הפונקציה מקבלת . charמספרים מסוג

יסמן 1)הארוז ומספר נוסף המציין את מיקום המספר הרצוי

הפונקציה תחזיר (. את המספר הימני 2-את המספר השמאלי ו

. unsigned charאת המספר המבוקש מסוג

102

Page 103: C Programming chapter 14

דוגמא אחרת לתוכנית המרה בין בסיסים

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

Page 104: C Programming chapter 14

דוגמא אחרת לתוכנית המרה בין בסיסים

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

Page 105: C Programming chapter 14

תרגילים

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

Page 106: C Programming chapter 14

תרגילים

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

Page 107: C Programming chapter 14

סיכום -סיביות וביטים

Shayke Bilu SCE-Chapter-14-Bits and Bytes

משמעות ייצוג מידע? מהם סיביות? ביטיםמדוע

אוקטאלי/ דצימלי -הקסה/ ייצוג מידע בינארי

ייצוג של בתים

מספרים

תווים ומחרוזות

פקודות(instructions)

פעולות ברמת הביטים

יחסי , בוליאניתלוגיקהor, and, not, xor

הזזות ימינה ושמאלה של ביטים והמשמעות של זה.

נכתוב זאת בתוכניות כיצדC ?

107

Page 108: C Programming chapter 14

SCE-Chapter-14-Bits and Bytes Shayke Bilu

?שאלות

108