Bitwise & vs Logical && Operators
1. הקדמה
בג'אווה יש לנו שתי דרכים לומר "AND". אבל באיזה שימוש?
במדריך זה נבחן את ההבדלים בין & ו &&. ונלמד על פעולות סיביות וקיצור דרך.
2. שימוש ב- Bitwise AND
אופרטור AND (&) סיבית משווה כל ספרה בינארית של שני מספרים שלמים ומחזירה 1 אם שניהם 1, אחרת הוא מחזיר 0.
בואו נסתכל על שני מספרים שלמים:
int שש = 6; int חמש = 5;
לאחר מכן, בואו נפעיל אופרטור AND bitwise על המספרים האלה:
int resultShouldBeFour = שש וחמש; assertEquals (4, resultShouldBeFour);
כדי להבין פעולה זו, בואו נסתכל על הייצוג הבינארי של כל מספר:
בינארי של עשרוני 4: 0100 בינארי של עשרוני 5: 0101 בינארי של עשרוני 6: 0110
המפעיל & מבצע מבצע לוגי ו- AND בכל ביט ומחזיר מספר בינארי חדש:
0110 0101 ----- 0100
לבסוף, התוצאה שלנו - 0100 – ניתן להמיר בחזרה למספר עשרוני - 4.
בואו נראה את קוד Java הבדיקה:
int שש = 6; int חמש = 5; int resultShouldBeFour = שש וחמש; assertEquals (4, resultShouldBeFour);
2.1. שימוש ב & עם בוליאנים
כמו כן, אנו יכולים להשתמש ב- AND (bitwise)&) מפעיל עם בוליאני אופרנדים. זה חוזר נָכוֹן רק אם שני האופרטים הם נָכוֹןאחרת, הוא חוזר שֶׁקֶר.
בוא ניקח שלוש בוליאני משתנים:
אמת בוליאני בול = נכון; בוליאני anotherTrueBool = נכון; בוליאני שקר בול = שקר;
לאחר מכן, בואו נפעיל אופרטור AND חכם על משתנים trueBool ו anotherTrueBool:
trueANDtrue בוליאני = trueBool & anotherTrueBool;
ואז, התוצאה תהיה נָכוֹן.
לאחר מכן, בואו נפעיל אופרטור AND חכם trueBool ו falseBool:
trueANDFalse בוליאני = trueBool & falseBool;
במקרה זה, התוצאה תהיה שֶׁקֶר.
בואו נראה את קוד Java הבדיקה:
אמת בוליאני בול = אמת; בוליאני anotherTrueBool = נכון; בוליאני שקר בול = שקר; trueANDtrue בוליאני = trueBool & anotherTrueBool; trueANDFalse בוליאני = trueBool & falseBool; assertTrue (trueANDtrue); assertFalse (trueANDFalse);
3. שימוש בלוגי AND
כמו &, ההגיוני AND (&&) אופרטור משווה את הערך של שני משתנים או ביטויים בוליאניים. והוא גם חוזר נָכוֹן רק אם שני האופרנדים הם נָכוֹןאחרת, הוא חוזר שֶׁקֶר.
בוא ניקח שלוש בוליאני משתנים:
אמת בוליאני בול = נכון; בוליאני anotherTrueBool = נכון; בוליאני שקר בול = שקר;
לאחר מכן, בואו נפעיל אופרטור AND הגיוני על משתנים trueBool ו anotherTrueBool:
trueANDtrue בוליאני = trueBool && anotherTrueBool;
ואז, התוצאה תהיה נָכוֹן.
לאחר מכן, בואו נפעיל אופרטור AND הגיוני על trueBool ו falseBool:
trueANDFalse בוליאני = trueBool && falseBool;
במקרה זה, התוצאה תהיה שֶׁקֶר.
בואו נראה את קוד Java הבדיקה:
אמת בוליאני בול = נכון; בוליאני anotherTrueBool = נכון; בוליאני שקר בול = שקר; בוליאני anotherFalseBool = שקר; trueANDtrue בוליאני = trueBool && anotherTrueBool; trueANDFalse בוליאני = trueBool && falseBool; בוליאני falseANDFalse = falseBool && anotherFalseBool; assertTrue (trueANDtrue); assertFalse (trueANDFalse); assertFalse (falseANDFalse);
3.1. קצר
אז מה ההבדל? נו, ה && קצר חשמלי למפעיל. פירוש הדבר שהוא אינו מעריך את אופרנד או ביטוי בצד ימין כאשר אופרנד או ביטוי בצד שמאל שֶׁקֶר.
בואו ניקח שני ביטויים המוערכים כשגויים:
ביטוי ראשון: 2 <1 ביטוי שני: 4 <5
כאשר אנו מיישמים אופרטור AND הגיוני על ביטויים 2<1 ו 4<5, ואז הוא מעריך רק את הביטוי הראשון 2<1 וחוזר שֶׁקֶר.
shortCircuitResult בוליאני = (2 <1) && (4 <5); assertFalse (shortCircuitResult);
3.2. שימוש ב- && עם מספרים שלמים
אנו יכולים להשתמש באופרטור & עם סוגים בוליאניים או מספריים, אך ניתן להשתמש ב- && רק עם אופרנדים בוליאניים. השימוש בו עם אופרנטים שלמים מביא לשגיאת אוסף:
int חמש = 2; int שש = 4; int result = חמש && שש;
4. השוואה
- המפעיל & תמיד מעריך את שני הביטויים, ואילו המפעיל && מעריך את הביטוי השני רק אם הראשון הוא נָכוֹן
- ומשווה בין כל אופרדים בקצרה, ואילו && פועלת רק על בוליאנים
5. מסקנה
במאמר זה השתמשנו במקצת & המפעיל להשוות ביטים של שתי ספרות וכתוצאה מכך ספרה חדשה. כמו כן, השתמשנו בהגיוני && המפעיל להשוות בין שני בוליאנים, וכתוצאה מכך ערך בוליאני.
ראינו גם כמה הבדלים מרכזיים בין שני המפעילים.
כמו תמיד, תוכל למצוא את הקוד עבור הדרכה זו ב- GitHub.