עבור לתוכן

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

Featured Replies

פורסם

איפה אני רושם את זה?

פורסם

הא??

אתה מתכוון אולי ל-sign?

זה תלוי באיזו שפה

פורסם
  • מחבר

הממ לא זה ככה וזה C

פורסם

לא זה לא ככה, אבל היית קרוב. ;)

יש משתנה שהוא רק שלילי:

signed int x;

ויש משתנה שהוא רק חיובי:

unsigned int x;

אפשר גם לקמבן עם long, short וכ'ו...

פורסם

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

פורסם

לגבי unsigned אני בטוח, עוד כמה דקות אעשה ניסוי לגבי signed.

עריכה:

חזרתי עם תוצאות:

[attachment deleted by admin]

פורסם

אוקיי אז התבלבלתי

זה פשוט הפוך

unsigned זה מ-0 עד 131072

ו-signed זה ממינוס 65535 ועד פלוס 65536

פורסם

כאשר אתה מגדיר משתנה מספרי מסוג 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 יהיה אחד מהם. כלומר, כל קומפיילר יתנהג אחרת.

פורסם

מה הכוונה ערכים 0-255 וערכים 127-128-?

אתה מתכוון לערכים בקוד ASCII?

פורסם

בערך...

מבחינת הקומפיילר, 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.

ארכיון

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

דיונים חדשים