שאלה למביני ענין ב- c++

paranr

New member
שאלה למביני ענין ב- c++

What’s potentially wrong with the following code? long value; //some stuff value &= 0xFFFF; תודה מראש, אורי
 

paranr

New member
אם מותר ש- long יקבל null,

אז התשובה לשאלה עדיין לא ברורה לי! אתה בטוח בזה?
 

paranr

New member
בדיוק, בסוף הפעולה

של ה- bitwize end , הערך שמשתנה מסוג long יקבל עלול להיות NULL , ולדעתי מכיוון ש long הוא טיפוס פרימיטיבי, הוא לא יכול לקבל NULL.
 

selalerer

New member
NULL זה פשוט 0, ויש לו משמעות של

NULL רק כאשר הוא בתוך משתנה מסוג פויינטר.
 

paranr

New member
מישהו יכול להסביר לי איך ה- bitwise

and עובד? לדוגמא נתתי למשתנה מטיפוס long את הערך 32000000 ולאחר הפעולה הערך שהתקבל היה 18432. 32000000 בבינארי זה 1111010000100100000000000 התוצאה , 18432, בבינארי זה 11000010000110010 , מישהו הבין איך זה עובד? תודה מראש, אורי
 

paranr

New member
טוב כבר הבנתי, זה עובד ככה:

1111010000100100000000000 1111111111111111 ___________________________ 100100000000000 = 18432
 

selalerer

New member
מה שלא בסדר פה זה שאתה לא יודע כיצד

מסודר long על המחשב שיקמפלו עבורו את הקוד הזה (Little Endian, Big Endian וכו') ואתה גם לא יודע מה הגודל שלו, ולכן התוצאה של החישוב הזה היא לא צפויה אם אתה לא יודע על איזה ארכיטקטורה אתה עובד.
 

paranr

New member
אוקי, סלרר, אז זאת התשובה הסופית

לשאלה, תודה רבה!
 

paranr

New member
או... אל תתחיל פה עם פילוסופיה.

אני חושב שמה שהתכוון אליו המשורר הוא בדיוק התשובה שאתה כתבת, אין צורך להתפלסף היכן שלא צריך...
 
אתה בכלל לא בכיוון, סלע ../images/Emo31.gif זה בכלל לא משנה איך מסודר שום דבר על המחשב שלו, ואין כאן שום עניין לא כתובות ושל endianity כלל. יש פה פעולה מתמטית פשוטה. בוא אני אשאל אותך עוד שאלה מנחה. מה יהיה הערך של value עכשיו?
long value; //some stuff value = value + 5;​
הבעיה כאן היא שאין ל value ערך התחלתי, ולכן גם הערך שלו אחרי ביצוע הפעולה הוא לא מוגדר. גם במקרה של השאלה המקורית זו הבעיה, ולא שום דבר מהדברים שאמרתם שניכם.
 

voguemaster

New member
מה הקשר ??

הבעיה בקוד הזה היא שמשתנה בכלל לא מאותחל. ה-AND הלוגי בכלל לא משנה. דווקא ההתנהגות מבחינת ENDIANESS היא בסדר. ה-LONG נשמר בזיכרון ב-ENDIANITY מסוים אבל גם המספר 0xFFFF נטען לזיכרון באותה צורה בדיוק ולכן הם מסונכרנים. מה שזה אומר זה ש-16 ביטים מה-LONG שלנו יישמרו בעוד שהשאר ייזרקו (אם ה-LONG גדול יותר, נניח 32 ביט). אם ה-LONG קצר יותר (באורח פלא), לא יקרה שום דבר מיוחד.
 

selalerer

New member
לשניכם:

ה-
//some stuff​
יכול להיות גם איתחול של המשתנה. זה ממש לא נראה לי הכיוון.
 
למעלה