שאלה קטנה ב C --->

zontar

New member
האם כוונתך היא ש X+Y=TRUE

ולכן 1>0
 

yair24

Member
לא. אני אתן לך את התשובה:

כמו שאמרת התוצאה היא באמת 14- 14- הוא בעצם 65522 למה? 14 בבינארי= 0000000000001110 תהפוך אותו למשלים ל1 זה יוצא 1111111111110001 תהפוך אותו למשלים ל2 על ידי זה שתוסיף 1 בינארי ותקבל: 1111111111110010 המספר הזה הוא בעצם 14- אבל מאחר והמחשב מתייחס אליו כUNSIGNED הוא הופך להיות 65522 ואם תבדוק אז 1111111111110010 זה בדיוק 65522 יאיר
 

yair24

Member
המממ...

בעצם משהו לא כל כך מסתדר לי כאן... כל האחדים האלה קצת מפריעים הסיבית הכי שמאלית משמשת לזיהוי הסימן של המספר ולכן כשמשתמשים בSIGNED טווח המספרים הוא 65536 ממינוס 32767 ועד פלוס 32767 (15 סיביות + סיבית סימן) אם משתמשים בUNSIGNED הטווח נשאר 65536 אבל המספרים הם מ0 עד 65536 (16 סיביות) עכשיו איך 14- הוא בעצם 1111111111110010? כלומר איך חוזרים ממשלים ל2 למספר המקורי? בצורה הבאה: מורידים 1 בינארי מקבלים 1111111111110001 לוקחים את ה1 הכי שמאלי ומשאירים אותו 1 ואז כל סיבית שהיא 1 הופכת ל0 וכל סיבית שהיא 0 הופכת ל1: 1000000000001110 ^ זאת נשארה 1 וזה בדיוק 14- הסיבית הכי שמאלית היא סיבית הסימן - 1 אומר מינוס. והמספר 1110 זה 14 ביחד מינוס 14. אז הכל הסתדר... יאיר
 

zontar

New member
../images/Emo45.gif../images/Emo6.gifאני שמח שאתה מוצא לעצמך

בעיות ומייד פותר אותם
 

selalerer

New member
while(x>y>2) חוקית אבל....

קודם כל מתבצע X<Y ומחזיר אמת או שקר (1 או 0) ואז מתבצעת ההשוואה השנייה, במקרה זה תמיד יוחזר שקר בגלל שגם 0 וגם 1 קטנים מ- 2
 
למעלה