עבור לתוכן

Casting,Java

Featured Replies

פורסם

היי,


int a=100;
char c=(char) a;

לפי מה שאני הבנתי אין אפשרות להעביר את המידע בין הטיפוס int ל char מיכוון שלפי הטבלה הנ"ל

[TABLE=class: text, width: 90%, align: center]

[TR]

[TD=width: 17%]char[/TD]

[TD=width: 23%]תו בודד 16 סיביות[/TD]

[TD=width: 59%]כתיבת תוים 'A' - 'Z', 'a' - 'z', סימנים מיוחדים וכדו'.[/TD]

[/TR]

[TR]

[TD=width: 17%]byte[/TD]

[TD=width: 23%]שלם 8 סיביות[/TD]

[TD=width: 59%]מספר שלם קטן 128 -/+.[/TD]

[/TR]

[TR]

[TD=width: 17%]short[/TD]

[TD=width: 23%]שלם 16 סיביות[/TD]

[TD=width: 59%]מספר שלם קטן 32,768 -/+.[/TD]

[/TR]

[TR]

[TD=width: 17%]int[/TD]

[TD=width: 23%]שלם 32 סיביות[/TD]

[TD=width: 59%]מספר שלם 2,147,483,648 -/+.[/TD]

[/TR]

[TR]

[TD=width: 17%]long[/TD]

[TD=width: 23%]שלם 64 סיביות[/TD]

[TD=width: 59%]מספר שלם גדול 232 -/+.[/TD]

[/TR]

[TR]

[TD=width: 17%]float[/TD]

[TD=width: 23%]ממשי 32 סיביות[/TD]

[TD=width: 59%]מספר ממשי (כלומר, בעל דיוק עשרוני).[/TD]

[/TR]

[TR]

[TD=width: 17%]double[/TD]

[TD=width: 23%]ממשי 64 סיביות[/TD]

[TD=width: 59%]מספר ממשי כפול.[/TD]

[/TR]

[TR]

[TD=width: 17%]boolean[/TD]

[TD=width: 23%]משתנה בוליאני[/TD]

[TD=width: 59%]משתנים בוליאניים מקבלים ערך אמת או שקר בלבד.[/TD]

[/TR]

[/TABLE]

[TABLE=width: 100%]

[TR]

[/TR]

[/TABLE]

char 16 סיביות ו int 32.

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

פורסם

קודם כל הקוד הזה יתקמפל בלי בעיה. רק אם לא תשים את ההמרה ל-char אז הוא יתן שגיאה.

טווח הערכים ש-char יכול לקבל קטן מטווח הערכים ש-int יכול לקבל. כאן יש הסבר יותר מדויק על טווח הערכים הזה:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

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

פורסם
  • מחבר

תודה :)

פורסם

אם אני לא טועה Char יכול להחזיק תו בודד , כמו שאמרת ^ ?

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

מצטער על ההתעלקות .

פורסם

יש הרבה הרבה יותר תווים מספרות. לכל תו יש ייצוג מספרי, וההמרה מ-int ל-char היא להמיר בין הייצוג המספרי של התו לתו עצמו, לא להמיר את המספר לתו שמחזיק את המספר הזה.

לדוגמה, אם x = 65 ו- c=(char)x אז c הוא התו 'a' (כי הייצוג המספרי של 'a' הוא 65).

הייצוגים המספריים של הספרות '0' עד '9' הם לא 0 עד 9, אלא 48 עד 57.

ארכיון

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

דיונים חדשים