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. השוואה

  1. המפעיל & תמיד מעריך את שני הביטויים, ואילו המפעיל && מעריך את הביטוי השני רק אם הראשון הוא נָכוֹן
  2. ומשווה בין כל אופרדים בקצרה, ואילו && פועלת רק על בוליאנים

5. מסקנה

במאמר זה השתמשנו במקצת & המפעיל להשוות ביטים של שתי ספרות וכתוצאה מכך ספרה חדשה. כמו כן, השתמשנו בהגיוני && המפעיל להשוות בין שני בוליאנים, וכתוצאה מכך ערך בוליאני.

ראינו גם כמה הבדלים מרכזיים בין שני המפעילים.

כמו תמיד, תוכל למצוא את הקוד עבור הדרכה זו ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found