27-10-2009, 15:24
|
|
|
|
חבר מתאריך: 12.04.06
הודעות: 2,021
|
|
תודה על ההסבר המפורט
אני לא מבין. אז בעצם
?
הרי כשאני ממיר את 11010011 אני מתייחס אליו כמספר חיובי, אז פתאום מתברר שהוא בכלל מייצג מספר שלילי שונה ממה שאני רוצה?
למרות שפעולת החיסור אכן הגיונית כי אם המספר זהה [פלוס ומינוס], התוצאה היא אפס,
אבל - בעצם המחשב לא מתייחס לזה באופן שהמתכנת רוצה שהוא יתייחס לזה?
דוגמא קטנה שניסיתי לבדוק, ויצא שאפילו המחשב לא יודע לשחזר את מה שהוא עצמו עשה.
ניכנסתי למחשבון של וידנוס [התחל > הפעלה > calc ]
הפעלתי תצוגה מדעית.
כתבתי תחת Dec את המספר -45 (מינוס ארבעים וחמש).
לחצתי שווה. (רק כדי שהוא יכניס לזכרון).
עכשיו, לחצתי על BIN והמספר אומר כמו שאמרת - התהפך, ונוסף לו אחד.
ועכשיו - רציתי לבדוק אם המחשבון יתייחס לזה באמת כמספר שלילי, לחצתי שוב על Dec - ו...
בעיה! המחשב בעצמו לא יודע לשחזר את המספר שהוא יצר למספר שלילי.
התוצאה שנכתבה היא: 18446744073709551571
עכשיו תגידו שהמחשב הוסיף את ה0, ואז הפך ל1 את כל הסיביות אז המספר השתנה ובגלל זה התקבל המספר החדש,
אבל אז אני שואל --- אם זה משנה לי את המספר, ולא מחזיר את המספר שאני מצפה שיוחזר, מה קורה כאן? ומה ההיגיון לגרום למחשב לעבוד בצורה שהוא לא יודע לעבוד?
אם היה לכל תא בזכרון סיבית לsign [נניח כמו sign flag באוגרים, אלא שיהיה לכל תא זיכרון] - הייתי מבין, ואז כשיש בה 1 זה מספר שלילי.
אבל אם הוא משנה את כל המספר, לערך שבני אדם לא יודעים לקרוא אותו (בצורה שלילית), מה ההיגיון?
_____________________________________
נערך לאחרונה ע"י MatiM בתאריך 27-10-2009 בשעה 15:31.
|