JavaRush /مدونة جافا /Random-AR /مقدمة لمشغلي جافا: المنطقية والحسابية والبتية

مقدمة لمشغلي جافا: المنطقية والحسابية والبتية

نشرت في المجموعة
لنتحدث عن العمليات في Java: رقمية ومنطقية وبتية. هذا هو الأساس النظري الذي نحتاجه بالتأكيد لتعلم كيفية البرمجة. مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 1

ما هي أنواع العوامل في جافا؟

لأي عملية نحتاج إلى شيئين على الأقل:
  • المشغل أو العامل؛
  • المعامل.
مثال على عامل التشغيل سيكون إضافة بسيطة في عملية إضافة رقمين. والأعداد المضافة إلى بعضها البعض ستكون معاملات في هذه الحالة. لذلك، بمساعدة عوامل التشغيل، نقوم بإجراء عمليات على معامل واحد أو أكثر. تسمى العوامل التي تنفذ العمليات على معاملين ثنائي. على سبيل المثال، إضافة رقمين. تسمى العوامل التي تنفذ العمليات على معامل واحد بأحادية. على سبيل المثال، ناقص الأحادي.

مشغلي جافا في دورة JavaRush

تم تخصيص عدة محاضرات لمشغلي Java في المستوى الرابع من المهمة الأولى - Java Syntax. على وجه الخصوص، عوامل التشغيل الشرطية مثل boolean . تحتوي الدورة على 22 مهمة ستساعدك على فهم عمل عوامل المقارنة، والعوامل الشرطية، والعوامل المنطقية.

عمليات الأرقام في جافا

العملية الأكثر شيوعًا التي يقوم بها المبرمجون على الأرقام هي تعيين قيمة رقمية لمتغير. هي، مثل المشغل، =مألوفة لك:
int a = 1;
int b = 2;
int c = 3;
هناك أيضًا عمليات حسابية. يتم تنفيذها باستخدام عوامل حسابية ثنائية:
الجدول 1. العوامل الحسابية الثنائية
مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 2لا ينبغي للمشغلين الأربعة الأوائل أن يثيروا أي أسئلة: كل شيء هو نفسه كما هو الحال في الرياضيات. العامل الأخير، أي ما تبقى من عملية القسمة، لا يقوم أيضًا بأي شيء معقد للغاية. على سبيل المثال، إذا قسمنا 24 على 7، نحصل على 3 أرقام صحيحة و3 أرقام متبقية. والباقي هو الذي سيعيده هذا العامل:
System.out.println(24 % 7); // prints 3
فيما يلي أمثلة من موقع توثيق أوراكل الرسمي: مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 3سيخرج هذا البرنامج ما يلي: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 تسمح لك Java للجمع: على سبيل المثال، تعيينات العوامل والعوامل الحسابية. لنلقي نظرة على مثال:
int x = 0;
x = x + 1; // x = 0 + 1 => x = 1
x = x + 1; // x = 1 + 1 => x = 2
x = x + 1; // x = 2 + 1 => x = 3
لقد قمنا هنا بتعريف متغير xوتخصيصه بقيمة صفر. بعد ذلك، في كل سطر نقوم بتعيين قيمة xلمجموع القيمة الحالية للمتغير xوواحد. هناك توضيحات في التعليقات لكل سطر. يسمى هذا الإجراء زيادة أو زيادة المتغير. يمكن استبدال العملية المتزايدة من المثال أعلاه بعملية مماثلة باستخدام مجموعة من العوامل:
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
يمكنك دمج عامل الإسناد مع أي عامل حسابي:
int x = 0;
x += 10; // x = 0 + 10 => x = 10
x -= 5; // x = 10 - 5 => x = 5
x *= 5; // x = 5 * 5 => x = 25
x /= 5; // x = 25 / 5 => x = 5
x %= 3; // x = 5 % 3 => x = 2;
دعونا نوضح كيفية عمل المثال الأخير:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 4
بالإضافة إلى العوامل الثنائية، لدى Java عوامل حسابية أحادية.
الجدول 2. العوامل الحسابية الأحادية:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 4مثال على الجمع الأحادي والناقص:
int x = 0;
x = (+5) + (+15); // Parentheses for clarity, it is possible without them
System.out.println("x = " + x);

int y = -x;
System.out.println("y = " + y);
مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 6
عمليات الزيادة والإنقاص بسيطة في الأساس. في الحالة الأولى يتم زيادة المتغير بمقدار 1، وفي الحالة الثانية يتم تقليل المتغير بمقدار 1. والمثال أدناه:
int x = 9;
x++;
System.out.println(x); // 10

int y = 21;
y--;
System.out.println(y); // 20
هناك نوعان من هذه العمليات - اللاحقة والبادئة. في الحالة الأولى، يتم كتابة العامل بعد المتغير، وفي الحالة الثانية، قبل المتغير. والفرق الوحيد هو عند تنفيذ عملية الزيادة أو التخفيض. المثال والوصف في الجدول أدناه. لنفترض أن لدينا متغير:
int a = 2;
ثم:
الجدول 3. عوامل الزيادة والنقصان:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 5توضيح:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 8
بالإضافة إلى الحساب، هناك عمليات المقارنة (رقمين). ستكون النتيجة دائمًا صحيحة أو خاطئة ( صحيح / خطأ ).
الجدول 4. عوامل المقارنة
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 9أمثلة:
int a = 1;
int b = 2;

boolean comparisonResult = a == b;
System.out.println("a == b :" + comparisonResult);

comparisonResult = a != b;
System.out.println("a != b :" + comparisonResult);

comparisonResult = a > b;
System.out.println("a >  b :" + comparisonResult);

comparisonResult = a >= b;
System.out.println("a >= b :" + comparisonResult);

comparisonResult = a < b;
System.out.println("a <  b :" + comparisonResult);

comparisonResult = a <= b;
System.out.println("a <= b :" + comparisonResult);
توضيح:
مقدمة لمشغلي جافا: منطقية، حسابية، Bitwise - 10

العمليات المنطقية في جافا

دعونا نلقي نظرة على العمليات المنطقية وجداول الحقيقة لكل منها:
  • عملية النفي ( NOT);
  • عملية الاقتران المنطقية AND ( AND);
  • عملية الفصل المنطقية OR ( OR);
  • عملية إضافة modulo، حصرية OR ( XOR).
عامل النفي أحادي وينطبق على معامل واحد. كافة العمليات الأخرى ثنائية. دعونا نفكر في جداول الحقيقة لهذه العمليات. هنا 0 يعادل خطأ في Java، و 1 يعادل صحيح .
الجدول 5. جدول الحقيقة لمشغل النفي (NOT)
مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 7
الجدول 6. جدول الحقيقة لمشغل الاقتران (AND)
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 8
الجدول 7. جدول الحقيقة لمشغل الانفصال (OR)
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 9
الجدول 8. جدول الحقيقة لمشغل إضافة الوحدة (XOR)
مقدمة لمشغلي جافا: منطقية، حسابية، Bitwise - 10لدى Java نفس العمليات المنطقية:
  • !- مشغل النفي؛
  • &&- عامل تشغيل منطقي AND (قصير)؛
  • ||- عامل التشغيل المنطقي OR (قصير)؛
  • &- عامل التشغيل AND؛
  • |- معامل البت OR؛
  • ^- مشغل OR الحصري للبت.
دعونا نلقي نظرة على الفرق بين عوامل البت والاختزال أدناه قليلًا، بينما دعونا نحول جميع جداول الحقيقة إلى كود Java:
public class LogicDemo {

   public static void main(String[] args) {
    notExample();
    andExample();
    orExample();
    xorExample();
   }

   public static void notExample() {
    System.out.println("NOT EXAMPLE:");
    System.out.println("NOT false = " + !false);
       System.out.println("NOT true  = " + !true);
    System.out.println();
   }

   public static void andExample() {
    System.out.println("AND EXAMPLE:");
    System.out.println("false AND false = " + (false & false));
    System.out.println("false AND true  = " + (false & true));
    System.out.println("true  AND false = " + (true & false));
    System.out.println("true  AND true  = " + (true & true));
    System.out.println();
   }

   public static void orExample() {
    System.out.println("OR EXAMPLE:");
    System.out.println("false OR false = " + (false | false));
    System.out.println("false OR true  = " + (false | true));
    System.out.println("true  OR false = " + (true | false));
     System.out.println("true  OR true  = " + (true | true));
    System.out.println();
   }

   public static void xorExample() {
    System.out.println("XOR EXAMPLE:");
    System.out.println("false XOR false = " + (false ^ false));
    System.out.println("false XOR true  = " + (false ^ true));
    System.out.println("true  XOR false = " + (true ^ false));
    System.out.println("true  XOR true  = " + (true ^ true));
    System.out.println();
   }
}
سيعرض هذا البرنامج: ليس مثال: NOT false = true NOT true = false ومثال: false و false = false false و true = false true و false = false true و true = true أو مثال: false OR false = false false OR true = true true OR false = true true OR true = true XOR مثال: false XOR false = false false XOR true = true true XOR false = true true XOR true = false تنطبق العوامل المنطقية على booleanالمتغيرات فقط. في حالتنا، قمنا بتطبيقها مباشرة على القيم، ولكن يمكنك أيضًا استخدامها مع booleanالمتغيرات:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 15
وإلى booleanالعبارات:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 16
الآن، لدينا عوامل الاختزال ( &&، ||) وعوامل تشغيل البت المماثلة ( &، |). ما الفرق بينهم؟ أولاً، يمكن تطبيق bitwise على الأعداد الصحيحة. سنتحدث عن هذا بعد قليل. وثانيا، بعضها مختصر والبعض الآخر ليس كذلك. لفهم كيف يبدو الاختصار، دعونا نلقي نظرة على التعبير:

false AND x = ?
true OR x = ?
يمكن أن يستغرق هذا xأي قيمة منطقية. وبشكل عام، ووفقاً لقوانين المنطق وجداول الحقيقة، بغض النظر عما إذا كان x صحيحاً أم خطأ ، فإن نتيجة التعبير الأول ستكون خاطئة ، ونتيجة الثاني ستكون صحيحة . ينظر.
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 17
في بعض الأحيان يمكن حساب نتيجة التعبير من المعامل الأول. وهذا ما يميز العوامل المختصرة &&و ||. في التعبيرات المشابهة لتلك الموصوفة أعلاه، فإنها لا تقوم بتقييم قيمة المعامل الثاني. إليك مثال صغير:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 18
في حالة عوامل الاختزال، لا يتم تقييم الجزء الثاني من التعبير. ولكن هذا يحدث فقط عندما تكون نتيجة التعبير واضحة بالفعل من المعامل الأول.

عمليات Bitwise في Java

حسنًا، نأتي هنا إلى الجزء الأكثر إثارة للاهتمام: العمليات المتعلقة بالبت. كما يوحي الاسم، هذه هي العمليات التي يتم تنفيذها على البتات. ولكن قبل أن نتعمق في هذا الموضوع، يجدر الحديث عن المجالات ذات الصلة.

تمثيل الأرقام في نظام الأرقام الثنائية

يتم تخزين الأرقام، مثل أي معلومات أخرى في البرنامج، في ذاكرة الكمبيوتر في رمز ثنائي. الرمز الثنائي عبارة عن مجموعة من الأصفار والواحدات. يمثل كل صفر أو واحد وحدة معلومات تسمى البت.

بحسب ويكيبيديا:

قليلا (من الرقم الثنائي الإنجليزي - الرقم الثنائي؛ أيضا اللعب على الكلمات: الإنجليزية بت - قطعة، جسيم) هي وحدة قياس كمية المعلومات. 1 بت من المعلومات هو رمز أو إشارة يمكن أن تأخذ معنيين: تشغيل أو إيقاف، نعم أو لا، مرتفع أو منخفض، مشحون أو غير مشحون؛ في النظام الثنائي يكون 1 (واحد) أو 0 (صفر).

ما نوع البيانات التي يعمل بها مشغلو bitwise؟

يتم تنفيذ عمليات Bitwise في Java على الأعداد الصحيحة فقط. يتم تخزين الأعداد الصحيحة في ذاكرة الكمبيوتر كمجموعة من البتات. يمكننا القول أن الكمبيوتر يحول أي معلومات إلى نظام أرقام ثنائي (مجموعة من البتات) وعندها فقط يتفاعل معها. ولكن كيف يعمل نظام الأرقام الثنائية؟ في نظام الأرقام العشري لدينا 10 رموز فقط: 0، 1، 2، 3، 4، 5، 6، 7، 8، 9. نستخدم هذه الرموز للعد. بعد 9 يأتي 10، بعد 19 - 20، بعد 99 - 100، بعد 749 - 750. أي أننا نستخدم مجموعة من الرموز العشرة المتاحة ويمكننا استخدامها للعد "من الصفر إلى الغداء". في نظام الأرقام الثنائية، بدلا من عشرة رموز، هناك رمزان فقط - 0، 1. ولكن من خلال الجمع بين هذه الرموز وفقا لنفس المبدأ كما هو الحال في النظام العشري، يمكننا العد إلى أجل غير مسمى.
دعونا نوضح العد من 0 إلى 15 بالنظام العشري والثنائي:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 11كما ترون، كل شيء ليس معقدا للغاية. بالإضافة إلى البتات، هناك وحدات مألوفة أخرى من المعلومات - البايت ، والكيلو بايت ، والميجابايت ، والجيجابايت ، وما إلى ذلك. ربما تعلم أن هناك 8 بتات في البايت الواحد . ماذا يعني ذلك؟ وهذا يعني أن 8 بتات متتالية تشغل بايت واحد. فيما يلي أمثلة لما يمكن أن تكون عليه وحدات البايت:

00000000 - 1 byte
10110010 - 1 byte
01011011 - 1 byte
عدد مجموعات البتات غير المتكررة المحتملة في البايت الواحد هو 256 (2 8 = 256). ولكن دعونا نعود أقرب إلى جافا. يوجد نوع بيانات صحيح - byte. يمكن لهذا النوع أن يأخذ القيم من -128 إلى 127 ويشغل الرقم الواحد في ذاكرة الكمبيوتر 8 بتات بالضبط، أو 1 بايت. رقم واحد من هذا النوع يشغل byteذاكرة كمبيوتر واحدة بالضبط. وهنا تتطابق الأسماء ليس بالصدفة. كما نتذكر، يمكن للبايت الواحد تخزين 256 قيمة مختلفة. byteويمكن أن يأخذ رقم النوع الواحد 256 قيمة مختلفة (128 سالبة، 127 موجبة و1 صفر). تحتوي كل قيمة رقمية byteعلى مجموعة فريدة من ثماني بتات. هذا هو الحال ليس فقط مع النوع byte، ولكن مع جميع الأنواع المتكاملة. ويرد النوع byteكمثال كأصغر. يوضح الجدول أدناه جميع أنواع الأعداد الصحيحة في Java ومساحة الذاكرة التي تشغلها: مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 12خذ بعين الاعتبار النوع int. يمكنه تخزين 2147483648 قيمة سالبة، 2147483647 قيمة موجبة، وصفر واحد. المجموع:

2147483648 + 2147483647 + 1 = 4294967296.
يشغل هذا النوع 32 بت من ذاكرة الكمبيوتر. عدد المجموعات الممكنة من مجموعة مكونة من 32 صفراً وواحداً هو:
232 = 4294967296.
نفس عدد القيم التي يمكن أن يحملها النوع int. هذا مجرد توضيح للعلاقة بين نطاق قيم نوع البيانات وحجمه (عدد البتات في الذاكرة). يمكن تحويل أي رقم من أي نوع في Java إلى ثنائي. دعونا نرى مدى سهولة القيام بذلك باستخدام لغة جافا. سوف نتعلم من مثال النوع int. هذا النوع له فئة المجمع الخاصة به - Integer. ولديه واحدة toBinaryString، والتي سوف تقوم بكل العمل بالنسبة لنا:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 21
فويلا - الأمر ليس بهذا التعقيد. ولكن لا يزال هناك شيء يحتاج إلى توضيح. intالرقم يأخذ 32 بت. ولكن عندما نطبع الرقم 10 في المثال أعلاه، نرى 1010 في وحدة التحكم، وذلك لأنه لا تتم طباعة الأصفار البادئة. إذا تم عرضها، فبدلاً من 1010 سنرى في وحدة التحكم 00000000000000000000001010. ولكن لسهولة الإدراك، تم حذف جميع الأصفار البادئة. ليس الأمر بهذه الصعوبة حتى تسأل نفسك: ماذا عن الأرقام السالبة؟ يتلقى المعلومات فقط في النظام الثنائي. اتضح أن علامة الطرح تحتاج أيضًا إلى الكتابة بالرمز الثنائي. يمكن القيام بذلك باستخدام التعليمات البرمجية المباشرة أو التكميلية.

الكود المباشر

طريقة لتمثيل الأرقام في نظام الأرقام الثنائية، حيث يتم تخصيص البت الأكثر أهمية (أقصى اليسار) لإشارة الرقم. إذا كان الرقم موجبًا، فسيتم كتابة البت الموجود في أقصى اليسار 0، وإذا كان سالبًا - 1.
دعونا نلقي نظرة على هذا باستخدام رقم 8 بت كمثال:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 13النهج بسيط ومفهوم من حيث المبدأ. ومع ذلك، فإن لها عيوب: صعوبات في إجراء العمليات الحسابية. على سبيل المثال، مع إضافة أرقام سلبية وإيجابية. لا يمكن طيها إلا إذا تم إجراء معالجات إضافية.

رمز إضافي

باستخدام تعليمات برمجية إضافية، يمكنك تجنب عيوب التعليمات البرمجية المباشرة. توجد خوارزمية بسيطة للحصول على الرمز الإضافي للرقم. دعنا نحاول الحصول على الرمز الإضافي للرقم -5. دعونا نمثل هذا الرقم باستخدام الكود المكمل لاثنين في نظام الأرقام الثنائية. الخطوة 1. نحصل على تمثيل لرقم سالب باستخدام الكود المباشر. بالنسبة إلى -5 سيكون 10000101. الخطوة 2. اعكس جميع الأرقام باستثناء رقم الإشارة. دعونا نستبدل جميع الأصفار بالآحاد، والواحدات بالأصفار في كل مكان باستثناء الجزء الموجود في أقصى اليسار.

10000101 => 11111010
الخطوة 3. أضف واحدًا إلى القيمة الناتجة:

11111010 + 1 = 11111011
مستعد. لقد حصلنا على قيمة -5 في نظام الأرقام الثنائية باستخدام الكود المكمل لاثنين. يعد هذا أمرًا مهمًا لفهم المواد التالية، نظرًا لأن Java تستخدم الكود المكمل ثنائي لتخزين الأرقام السالبة في وحدات البت.

أنواع العمليات bitwise

الآن بعد أن تعاملنا مع جميع المقدمات، دعونا نتحدث عن عمليات البت في Java. يتم تنفيذ عملية bitwise على الأعداد الصحيحة وتكون نتيجتها عددًا صحيحًا. في هذه العملية، يتم تحويل الرقم إلى ثنائي، ويتم تنفيذ عملية على كل بت، ويتم تحويل النتيجة مرة أخرى إلى رقم عشري. قائمة العمليات موجودة في الجدول أدناه: مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 14كما اكتشفنا بالفعل، يمكن تمثيل الأرقام كمجموعة من البتات. تقوم عمليات Bitwise بإجراء عمليات على كل بت من هذا التمثيل بالضبط. لنأخذ NOT، AND، OR، XOR. تذكر أننا نظرنا مؤخرًا إلى جداول الحقيقة بحثًا عن المعاملات المنطقية فقط. في هذه الحالة، يتم تطبيق نفس العمليات على كل بت من العدد الصحيح.

المشغل الأحادي للبت NOT ~

يستبدل هذا العامل جميع الأصفار بواحد، وكل الآحاد بأصفار. لنفترض أن لدينا الرقم 10 بالتدوين العشري. في النظام الثنائي، هذا الرقم هو 1010. إذا طبقنا عامل النفي الأحادي للبت على هذا الرقم، فسنحصل على شيء مثل هذا: دعونا مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 15نلقي نظرة على ما يبدو عليه في كود Java:
public static void main(String[] args) {
   int a = 10;

   System.out.println(" a = " + a + "; binary string: " + Integer.toBinaryString(a));
   System.out.println("~a = " + ~a + "; binary string: " + Integer.toBinaryString(~a));
}
الآن دعونا نرى ما يتم عرضه في وحدة التحكم:
مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 25
في السطر الأول حصلنا على القيمة في نظام الأرقام الثنائية دون الأصفار البادئة. رغم أننا لا نراهم، إلا أنهم موجودون. يتضح هذا من خلال السطر الثاني، الذي تم فيه تحويل جميع البتات إلى بتات عكسية. ولهذا السبب نرى الكثير من الوحدات الرائدة. هذه هي الأصفار البادئة السابقة التي تم تجاهلها بواسطة المترجم عند طباعتها على السطر الأول. إليك برنامج صغير يعرض أيضًا الأصفار البادئة للوضوح.
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 26

عامل التشغيل AND

ينطبق هذا العامل على رقمين. ينفذ عملية ANDبين بتات كل رقم. دعونا نلقي نظرة على مثال: مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 16يتم تنفيذ هذه العملية على رقمين. مثال في كود جافا:
مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 28

مشغل Bitwise OR

أو ينطبق على رقمين. ينفذ عملية OR بين بتات كل رقم: مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 17الآن دعونا نلقي نظرة على الشكل الذي سيبدو عليه هذا في IDEA:
مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 30

عملية ثنائية، حصرية OR (XOR)

دعونا ننظر إلى نفس المثال، ولكن مع عملية جديدة: مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 18رمز المثال:
مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 32

إزاحة اتجاه البت إلى اليسار

ينطبق هذا العامل على معاملين، أي أنه في العملية ، ستغير x << yبتات الرقم مواضعها إلى اليسار. ماذا يعني ذلك؟ لننظر إلى مثال العملية، نتيجة العملية ستكون الرقم 20 في النظام العشري. كما ترون من الرسم البياني أعلاه، يتم إزاحة جميع البتات إلى اليسار بمقدار 1. أثناء هذه العملية، يتم فقدان قيمة البت الأكثر أهمية (البت الموجود في أقصى اليسار). والبت الأقل أهمية (البت الموجود في أقصى اليمين) يتم ملؤه بالصفر. ماذا يمكنك أن تقول عن هذه العملية؟ xy10 << 1 مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 19
  1. من خلال نقل بتات الرقم Xإلى Nاليسار، نضرب الرقم Xبـ 2 N .

    هنا مثال:

    مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 34
  2. لكن! قد تتغير إشارة الرقم إذا اتخذت البتة ذات القيمة 1 الموضع في أقصى اليسار.

  3. إذا قمت بالانتقال إلى اليسار إلى أجل غير مسمى، فسيتحول الرقم ببساطة إلى 0. دعنا نوضح النقطتين 2 و3:

    مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 35

تحويل اتجاه البت إلى اليمين

ينطبق هذا العامل على معاملين. أولئك. في هذه العملية x >> y، سوف تقوم بتات الرقم xبتغيير yمواضعها إلى اليمين. دعونا ننظر إلى مثال آخر. دعونا نحلل العملية بشكل تخطيطي 10 >> 1. دعونا ننقل جميع البتات الخاصة بالرقم 10 إلى موضع واحد إلى اليمين: مقدمة لمشغلي Java: المنطقي، الحسابي، Bitwise - 20أثناء عملية النقل، نفقد البتات الصحيحة. إنهم ببساطة يختفون. البت الموجود في أقصى اليسار هو علامة الرقم (0 موجب، 1 سالب). لذلك، يتم وضعه في القيمة النهائية كما هو الحال في الرقم الأصلي. مثال مع رقم سالب: مقدمة لمشغلي جافا: المنطقية والحسابية والبتية - 21يتم فقدان البت الموجود في أقصى اليمين، ويتم نسخ البت الموجود في أقصى اليسار من الرقم الأصلي، كعلامة فخرية للرقم. كيف تفعل كل هذا في IDEA؟ من حيث المبدأ، لا يوجد شيء معقد، فقط خذها وحركها:
Знакомство с операторами Java: логические, арифметические, побитовые - 38
الآن. ماذا يمكنك أن تقول عن الأعداد التي انتقلت إلى اليمين؟ وهي قابلة للقسمة على 2. في كل مرة نقوم فيها بإزاحة بت واحد إلى اليمين، نقسم الرقم الأصلي على 2. إذا كان الرقم غير قابل للقسمة على 2، فسيتم تقريب النتيجة نحو سالب ما لا نهاية (لأسفل). لكن هذا لا ينجح إلا إذا قمنا بتحويل البتات بمقدار 1 بالضبط. وإذا قمنا بإزاحة البتات بمقدار 1 بت، نقسم على 4. وعلى 3 بتات، نقسم على 8. وعلى 4 بتات، نقسم على 16. أرأيت؟ قوى 2... عندما نقوم بنقل رقم Xإلى Nاليمين بالبتات، فإننا نقسم الرقم Xعلى 2 أس 2 N. توضيح:
public class BitOperationsDemo {

   public static void main(String[] args) {

    for (int i = 1; i <= 10; i++) {

        int shiftOperationResult = 2048 >> i;
        int devideOperationResult = 2048 / (int) Math.pow(2, i);


           System.out.println(shiftOperationResult + " - " + devideOperationResult);
    }

   }

}
ما الذي يحدث هنا؟
  1. حلقة يتم فيها زيادة المتغير i من 1 إلى 10.

  2. في كل تكرار نحسب قيمتين:
    • نكتب في المتغير shiftOperationResultنتيجة نقل الرقم 2048 بمقدار i بت إلى اليمين؛

    • devideOperationResultنكتب نتيجة قسمة الرقم 2048 على 2 للقوة i إلى متغير .

  3. نعرض القيمتين اللتين تم الحصول عليهما في أزواج.

نتيجة تنفيذ البرنامج كالتالي: 1024 - 1024 512 - 512 256 - 256 128 - 128 64 - 64 32 - 32 16 - 16 8 - 8 4 - 4 2 - 2

إزاحة لليمين باتجاه البت مع حشوة صفرية

في حين أن الإزاحة العادية للبت إلى اليمين تحافظ على إشارة الرقم (البت الأكثر أهمية تحتفظ بقيمتها)، فإن الإزاحة لليمين ذات التعبئة الصفرية لا تفعل ذلك. والجزء الأكثر أهمية مملوء بالصفر. دعونا نرى كيف يبدو: Знакомство с операторами Java: логические, арифметические, побитовые - 22

أسبقية العمليات في جافا

مثل الرياضيات، جافا لديها الأسبقية في العمليات. يوضح الجدول أدناه الأولوية (من الأعلى إلى الأدنى) للعمليات التي أخذناها في الاعتبار. Знакомство с операторами Java: логические, арифметические, побитовые - 23

أمثلة مفيدة للاستخدام

تحديد تكافؤ الرقم

Знакомство с операторами Java: логические, арифметические, побитовые - 24

العثور على الحد الأقصى للعنصر في المصفوفة

Знакомство с операторами Java: логические, арифметические, побитовые - 25للعثور على الحد الأدنى من العناصر، ما عليك سوى تغيير علامة المقارنة في المكان المناسب.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION