אני אני משתמש ב sing/unsing? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

אני אני משתמש ב sing/unsing?


nehmia

Recommended Posts

עד כמה שאני זוכר, לפחות מפסקל, un signed זה פשוט המשתנה הרגיל(int למשל) עם תווך ערכים של ממינוס 65535 ועד פלוס 65536, כאשר signed זה רק פלוס אבל מגיע לערך 131072.

קישור לתוכן
שתף באתרים אחרים

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

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

בד"כ ברגיל, המשתנים הם ישר SIGNED אלה אם אתה מפורשות אומר לו שאתה רוצה שהם יהיו UNSIGNED.

טווח הערכים הספציפי תלוי במימוש הקומפילר/מעבד של המחשב, ככה שכמו שנאמר פה, למשל, אם משתנה מסוג INTEGER לוקח 16 ביטים במימוש מסויים, אז

SIGNED INTEGER = 15 BIT FOR NUMBER + 1 BIT FOR SIGN

משמע טווח הערכים הוא בין -32768 ל 32768. (שזה הרגיל). לעומת זאת אם אתה מגדיר UNSIGNED אז

UNSIGNED INTEGER = 16 BIT FOR NUMBER

משמע טווח ערכים בין 0 ל 65536.

כמובן שאם תתן למשתנה UNSIGNED INT מספר שלילי, הוא ישים אותו במקום ההוא בזכרון, אבל כשתקרא אותו הוא יראה שונה בגלל הייצוג.

קישור לתוכן
שתף באתרים אחרים

עוד כמה הערות:

1. כברירת מחדל, int הוא תמיד signed. כלומר, להגדיר:

int x;

ולהגדיר

signed int x;

זה אותו דבר.

2. אם תשים ערך שלילי מפורש במספר unsigned, הקומפיילר יזהיר אותך מפני זה.

3. אפשר להגדיר גם signed/unsigned char (שקובע אם הטווח יהיה 0-255 או מינוס 128 עד 127).

אבל, בניגוד ל-int, אם לא רושמים signed/unsigned הקומפיילר לא מחוייב שה-char יהיה אחד מהם. כלומר, כל קומפיילר יתנהג אחרת.

קישור לתוכן
שתף באתרים אחרים

בערך...

מבחינת הקומפיילר, char, בדיוק כמו int, הוא מספר, רק שהוא מכיל רק 8 ביט (ולא 16 או 32), ולכן מכיל ערכים מ-0 עד 255 (אם הוא unsigned) או ממינוס 128 עד 127 (אם הוא signed).

אבל, ל-char יש כמה שימושים מיוחדים:

כל תו בין גרשיים (לדוגמה 'a' או '1') הוא קבוע מסוג char, שהמספר שהוא מייצג הוא לפי ייצוג ה-ASCII.

כל סדרה של תווים בין גרשיים (לדוגמה "hello world") הוא קבוע מסוג char*, כלומר מערך של תווים.

וחוץ מזה, פונקציות מסוימות מתייחסות ל-char כאות - כל הפונקציות שמתייחסות למחרוזות (פונקציות הדפסה לדוגמה).

כמובן, לקומפיילר לא ממש איכפת אם הערך של 'א' הוא 208 או 48-, כי הייצוג הביטי שלהם הוא אותו דבר.

בגלל זה אין התחייסות לגבי זה ש-char יהיה signed או unsigned.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...