الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة مع ال (~) Complement

بدأه mr.beshoy في 23 ديسمبر 2009 · 3 رد · 741 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

معلش يا جماعة

احنا عارفين أن الرقم 11 ال binary بتاعه (1011)

لما نحب نعمل complement لل 11 بيكون -12 لماذا هذا ؟؟

تجاوزاً عن تلك النقطة :

عندما نريد الحصزل على ال complement لل binary بيحول كل 1 إلى 0 و كل 0 إلى 1 (( و لا أنا فاهم غلط ؟؟))

عندما انفذ complement لل (1011) فى اعتقادى المفروض ينتج (0100)

لكن النتيجة غير كده تماماً

اليكم الشفيرة :

public class BitWiseTest {

    public static void main(String[] args) {
        byte bit = 11;
        //    byte complement = (byte) ~(bit);
        System.out.println("The complement of: " + "" + Integer.toBinaryString(bit) + " " + "is" + "\n" +
               ~bit);
    }
}

شكراً

#2

صحيح يا بيشوي

لأن الرقم 1011 هو عبارة عن رقم صحيح int

ومعروف أن المتغيرات من هذا النوع تتكون 4 بايت

بمعنى آخر الرقم فعلياً هو 00001011...

لذا ستجد أن الناتج مختلف تماماً

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3
اقتباس
عندما انفذ complement لل (1011) فى اعتقادى المفروض ينتج (0100)

أخي, العدد مكون من 32 بت, بالتالي, فإن المتمم:

~00000000000000000000000000001011
==
 11111111111111111111111111110100

القيمة التي ظهرت, يمكن أن تفسرها بأكثر من طريقة, فمثلاً إذا كان المعالج يستخدم الـ one's complement فإن القيمة هي سالب 11,

في الوقت الحالي, معظم إن لم يكن 99.999% من المنصات و من ضمنها JVM, تستخدم الـ two's complement لتمثيل الأعداد السالبة, بالتالي, فإن تلك القيمة تعني سالب 12

لتحويل عدد موجب إلى عدد سالب في تمثيل الـ two's complement:

int n = 11;
int negative_n = ~n + 1; // -11 in 2's complement
int positive_n = ~negative_n + 1; // 11 again!

تحياتي,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 23 ديسمبر 2009 في 07:53

1
#4

شكراً ياشباب على ردكم و تفهمت الأمر

شكراً

مواضيع مشابهة