Java عوامل وحدات الحاسوب في جافا
العامل &
(Bitwize AND)
العامل &
يحسب ناتج جمع البتات (Bits) المشتركة بين قيمتين.
مثال
public class Main { public static void main(String[] args) { int a = 10; // a = 10 = 00000000000000000000000000001010 int b = 75; // b = 75 = 00000000000000000000000001001011 int c = a & b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل System.out.print(a+ " & " +b+ " = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
10 & 75 = 10
هنا قمنا بتعليم البتات المشتركة و التي تم جمعها باللون الاصفر.
b = 75;      // 75 = 00000000000000000000000001001011
c = a & b;   //  c = 00000000000000000000000000001010
             //  c = 10
العامل |
(Bitwize OR)
العامل |
يحسب ناتج جمع البتات المشتركة و الغير مشتركة بين قيمتين.
مثال
public class Main { public static void main(String[] args) { int a = 10; // 10 = 00000000000000000000000000001010 int b = 75; // 75 = 00000000000000000000000001001011 int c = a | b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل System.out.print(a+ " | " +b+ " = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
10 | 75 = 75
هنا قمنا بتعليم البتات المشتركة و الغير مشتركة و التي تم جمعها باللون الاصفر.
b = 75;      // 75 = 00000000000000000000000001001011
c = a | b;   //  c = 00000000000000000000000001001011
             //  c = 75
العامل ^
(Bitwize XOR)
العامل ^
يحسب ناتج جمع البتات الغير مشتركة بين قيمتين.
مثال
public class Main { public static void main(String[] args) { int a = 10; // 10 = 00000000000000000000000000001010 int b = 75; // 75 = 00000000000000000000000001001011 int c = a ^ b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل System.out.print(a+ " ^ " +b+ " = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
10 ^ 75 = 65
هنا قمنا بتعليم البتات الغير مشتركة و التي تم جمعها باللون الاصفر.
b = 75;      // 75 = 00000000000000000000000001001011
c = a | b;   //  c = 00000000000000000000000001000001
             //  c = 65
العامل ~
(Bitwize Compliment OR)
العامل ~
يقلب البتات التي تساوي 0 إلى 1 و يقلب البتات التي تساوي 1 إلى 0.
بعدها يتم حساب الناتج باتباع مبدأ إسمه single precision floating point number.
مثال
public class Main { public static void main(String[] args) { int a = 10; // 10 = 00000000000000000000000000001010 int c = ~a; // c = 11111111111111111111111111110101 = -11 System.out.print("~" +a+ " = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
~10 = -11
العامل <<
(Left Shift)
العامل <<
يمسح بتات من ناحية اليسار ثم يبدل كل بت تم مسحه منهم بصفر و يضعهم من ناحية اليمين.
مثال
public class Main { public static void main(String[] args) { int a = 10; // 10 = 00000000000000000000000000001010 int c = a << 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل System.out.print(a+ " << 2 = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
10 << 2 = 40
هنا قمنا بتعليم البتات التي تم مسحها باللون الاصفر و تعليم البتات التي تم إضافتها باللون الأزرق.
c = a << 2;   //  c = 00000000000000000000000000101000 = 40
              //  c = 40
العامل >>
(Right Shift)
العامل >>
عندها حالتين: قد يكون العدد أكبر من صفر أو أصغر من صفر.
- إذا كان العدد أكبر من صفر, يمسح بتات من ناحية اليمين ثم يبدل كل بت منهم بصفر و يضعهم من ناحية اليسار.
- إذا كان العدد أصغر من صفر, يمسح بتات من ناحية اليمين ثم يبدل كل بت منهم بواحد ليحافظ على إشارة الناقص و يضعهم من ناحية اليسار.
المثال الأول
الحالة الأولى: إذا كان العدد أكبر من صفر.
public class Main { public static void main(String[] args) { int a = 9; // 9 = 00000000000000000000000000001001 int c = a >> 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل System.out.print(a+ " >> 2 = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
هنا قمنا بتعليم البتات التي تم مسحها باللون الاصفر و تعليم البتات التي تم إضافتها باللون الأزرق.
c = a >> 2;   // c = 00000000000000000000000000000010
              // c = 2
المثال الثاني
الحالة الثانية: إذا كان العدد أصغر من صفر.
public class Main { public static void main(String[] args) { // Note " >> " converts the number in 32 bits form int a = -9; // -9 = 11111111111111111111111111111101 int c = a >> 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل System.out.print(a+ " >> 2 = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
-9 >> 2 = -3
هنا قمنا بتعليم البتات التي تم مسحها باللون الاصفر و تعليم البتات التي تم إضافتها باللون الأزرق.
c = a >> 2;   //  c = 11111111111111111111111111111101
              //  c = -3
العامل >>>
(Zero Fill Right Shift)
العامل >>>
يمسح بتات من ناحية اليمين ثم يبدل كل بت منهم بصفر و يضعهم من ناحية اليسار.
مثال
public class Main { public static void main(String[] args) { int a = 10; // 10 = 00000000000000000000000000001010 int c = a >>> 2; // c = 00000000000000000000000000000010 = 2 System.out.print(a+ " >>> 2 = " +c); } }
سنحصل على النتيجة التالية عند التشغيل.
10 >>> 2 = 2
ما هو الفرق بين العامل >>>
و العامل >>
؟
الفرق بنهما هو أن العامل >>>
يحول دائماً آخر بت في العدد إلى 0 و هذا سيجعل الناتج دائماً رقم أكبر أو يساوي 0.