العوامل التي تستخدم للتعامل مع الـ Bits في جافا 

المناهج السعودية
العوامل التي تستخدم للتعامل مع الـ Bits في جافا

العوامل التي تستخدم للتعامل مع الـ Bits في جافا

العوامل التي تستخدم للتعامل مع الـ Bits في جافا

العوامل التي تستخدم للتعامل مع الـ Bits في جافا

العوامل التي تستخدم للتعامل مع الـ Bits في جافا

المناهج السعودية

العوامل التي تستخدم للتعامل مع الـ Bits في جافا

العامل & (Bitwize AND)

العامل & يحسب ناتج جمع الـ bits المشتركة بين قيمتين.

مثال

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. int a = 10; // a = 10 = 00000000000000000000000000001010
  4. int b = 75; // b = 75 = 00000000000000000000000001001011
  5. int c = a & b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
  6. System.out.print(a+ ” & “ +b+ ” = “ +c);
  7. }
  8. }

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

  • 10 & 75 = 10

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

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

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

العامل | (Bitwize OR)

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

مثال

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. int a = 10; // 10 = 00000000000000000000000000001010
  4. int b = 75; // 75 = 00000000000000000000000001001011
  5. int c = a | b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
  6. System.out.print(a+ ” | “ +b+ ” = “ +c);
  7. }
  8. }

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

  • 10 | 75 = 75

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

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

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

العامل ^ (Bitwize XOR)

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

مثال

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. int a = 10; // 10 = 00000000000000000000000000001010
  4. int b = 75; // 75 = 00000000000000000000000001001011
  5. int c = a ^ b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
  6. System.out.print(a+ ” ^ “ +b+ ” = “ +c);
  7. }
  8. }

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

  • 10 ^ 75 = 65

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

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

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

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

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

مثال

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. int a = 10; // 10 = 00000000000000000000000000001010
  4. int c = ~a; // c = 11111111111111111111111111110111 = -11
  5. System.out.print(“~” +a+ ” = “ +c);
  6. }
  7. }

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

  • ~10 = –11

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

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

مثال

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. int a = 10; // 10 = 00000000000000000000000000001010
  4. int c = a << 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
  5. System.out.print(a+ ” << 2 = “ +c);
  6. }
  7. }

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

  • 10 << 2 = 40

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

a = 10;       // 10 = 00000000000000000000000000001010

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

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

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

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

المثال الأول

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

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. int a = 9; // 9 = 00000000000000000000000000001001
  4. int c = a >> 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
  5. System.out.print(a+ ” >> 2 = “ +c);
  6. }
  7. }

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

9 >> 2 = 2

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

a = 9;        // 9 = 00000000000000000000000000001001

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

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

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

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. // Note ” >> ” converts the number in 32 bits form
  4. int a = –9; // -9 = 11111111111111111111111111111000
  5. int c = a >> 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل
  6. System.out.print(a+ ” >> 2 = “ +c);
  7. }
  8. }

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

  • 9 >> 2 = –3

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

a = -9;       // -9 = 11111111111111111111111111110111

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

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

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

مثال

Main.java

  1. publicclass Main {
  2. publicstaticvoidmain(String[] args){
  3. int a = 10; // 10 = 00000000000000000000000000001010
  4. int c = a >>> 2; // c = 00000000000000000000000000000010 = 2
  5. System.out.print(a+ ” >>> 2 = “ +c);
  6. }
  7. }

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

  • 10 >>> 2 = 2

ما هو الفرق بين العامل >>> و العامل >>؟

الفرق بنهما هو أن العامل >>> يحول دائماً آخر bit في العدد إلى 0 و هذا سيجعل الناتج دائماً رقم أكبر أو يساوي 0.

 

Be the first to comment

اترك رد