Java عوامل وحدات الحاسوب في جافا

العامل & (Bitwize AND)

العامل & يحسب ناتج جمع البتات (Bits) المشتركة بين قيمتين.

مثال

Main.java
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
		

هنا قمنا بتعليم البتات المشتركة و التي تم جمعها باللون الاصفر.

a = 10;      // 10 = 00000000000000000000000000001010
b = 75;      // 75 = 00000000000000000000000001001011

c = a & b;   //  c = 00000000000000000000000000001010
             //  c = 10


العامل | (Bitwize OR)

العامل | يحسب ناتج جمع البتات المشتركة و الغير مشتركة بين قيمتين.

مثال

Main.java
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
		

هنا قمنا بتعليم البتات المشتركة و الغير مشتركة و التي تم جمعها باللون الاصفر.

a = 10;      // 10 = 00000000000000000000000000001010
b = 75;      // 75 = 00000000000000000000000001001011

c = a | b;   //  c = 00000000000000000000000001001011
             //  c = 75


العامل ^ (Bitwize XOR)

العامل ^ يحسب ناتج جمع البتات الغير مشتركة بين قيمتين.

مثال

Main.java
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
		

هنا قمنا بتعليم البتات الغير مشتركة و التي تم جمعها باللون الاصفر.

a = 10;      // 10 = 00000000000000000000000000001010
b = 75;      // 75 = 00000000000000000000000001001011

c = a | b;   //  c = 00000000000000000000000001000001
             //  c = 65


العامل ~ (Bitwize Compliment OR)

العامل ~ يقلب البتات التي تساوي 0 إلى 1 و يقلب البتات التي تساوي 1 إلى 0.
بعدها يتم حساب الناتج باتباع مبدأ إسمه single precision floating point number.

مثال

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        int a = 10;     // 10 = 00000000000000000000000000001010
        int c = ~a;     //  c = 11111111111111111111111111110111 = -11
 
        System.out.print("~" +a+ " = " +c);
 
    }
 
}
		

سنحصل على النتيجة التالية عند التشغيل.

~10 = -11
		


العامل << (Left Shift)

العامل << يمسح بتات من ناحية اليسار ثم يبدل كل بت تم مسحه منهم بصفر و يضعهم من ناحية اليمين.

مثال

Main.java
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
		

هنا قمنا بتعليم البتات التي تم مسحها باللون الاصفر و تعليم البتات التي تم إضافتها باللون الأزرق.

a = 10;       // 10 = 00000000000000000000000000001010

c = a << 2;   //  c = 00000000000000000000000000101000 = 40
              //  c = 40


العامل >> (Right Shift)

العامل >> عندها حالتين: قد يكون العدد أكبر من صفر أو أصغر من صفر.

  • إذا كان العدد أكبر من صفر, يمسح بتات من ناحية اليمين ثم يبدل كل بت منهم بصفر و يضعهم من ناحية اليسار.
  • إذا كان العدد أصغر من صفر, يمسح بتات من ناحية اليمين ثم يبدل كل بت منهم بواحد ليحافظ على إشارة الناقص و يضعهم من ناحية اليسار.

المثال الأول

الحالة الأولى: إذا كان العدد أكبر من صفر.

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        int a = 9;        // 9 = 00000000000000000000000000001001
        int c = a >> 2;   // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
 
        System.out.print(a+ " >> 2 = " +c);
 
    }
 
}
		

سنحصل على النتيجة التالية عند التشغيل.

9 >> 2 = 2

هنا قمنا بتعليم البتات التي تم مسحها باللون الاصفر و تعليم البتات التي تم إضافتها باللون الأزرق.

a = 9;        // 9 = 00000000000000000000000000001001

c = a >> 2;   // c = 00000000000000000000000000000010
              // c = 2

المثال الثاني

الحالة الثانية: إذا كان العدد أصغر من صفر.

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // Note " >> " converts the number in 32 bits form
 
        int a = -9;       // -9 = 11111111111111111111111111111000
        int c = a >> 2;   // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
 
        System.out.print(a+ " >> 2 = " +c);
 
    }
 
}
		

سنحصل على النتيجة التالية عند التشغيل.

-9 >> 2 = -3
		

هنا قمنا بتعليم البتات التي تم مسحها باللون الاصفر و تعليم البتات التي تم إضافتها باللون الأزرق.

a = -9;       // -9 = 11111111111111111111111111110111

c = a >> 2;   //  c = 11111111111111111111111111111101
              //  c = -3


العامل >>> (Zero Fill Right Shift)

العامل >>> يمسح بتات من ناحية اليمين ثم يبدل كل بت منهم بصفر و يضعهم من ناحية اليسار.

مثال

Main.java
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.

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة