سؤال

في هذا الرمز المصدر Java لدي هذا الخط:

if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....

ماذا تيلد ~ يعني؟

هل كانت مفيدة؟

المحلول

tilde (~) يؤدي تكمل بسيط من القيمة العددية في جافا.

يرى: تكمل bitwise (~): عكس تلك والأصفار في عدد

نصائح أخرى

انها unary ~ تكمل bitwise المشغل أو العامل (اقتباس) :

  • تستخدم فقط مع القيم الصحيحة
  • عكس البتات، أي 0 بت يصبح 1 بت والعكس صحيح
  • في جميع الحالات ~ x يساوي (-x) -1

أنظر أيضا هذه الصفحة على مشغلي bitwise على ويكيبيديا, ، التي تنص على :

تعد Notwore Not، أو تكمل، عملية غير مجهولة تؤدي نفا منطقي في كل بت، مما يشكل مكملا من القيمة الثنائية المحددة. الأرقام التي كانت 0 تصبح 1، والعكس صحيح.
علي سبيل المثال:

NOT 0111  (decimal 7)
  = 1000  (decimal 8)

في العديد من لغات البرمجة (بما في ذلك تلك الموجودة في الأسرة C), ، وليس مشغل bitwise هو "~"(تيلد).

من موقع جافا http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html.

مشغل مكملا غير Autary Bither "~" ينقل نمط بعض الشيء؛ يمكن تطبيقه على أي من الأنواع المتكاملة، مما يجعل كل "0" A "1" وكل "1" A "0". على سبيل المثال، يحتوي بايت 8 بت؛ تطبيق هذا المشغل على قيمة نمط بت "00000000" من شأنه أن يغير نمطه إلى "11111111".

الآن، كما أجاب سابقا من قبل باسكال مارتن، في أي حالة معينة يتساوى VLAue - (x) -1. على سبيل المثال ~ 2 = -3، ~ -6 = 5، إلخ.

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

الآن، دعونا نرى كيف يعمل على مستوى بت في حالة ~ 2 = -3:

في البداية، يتم تخزين 2 في التمثيل الثنائي:

0000 0000 0000 0010

الآن ~ 2 سيؤدي إلى القيمة (معكوس البتات):

1111 1111 1111 1101

كيف أعرف في العالم أنه -3؟ حسنا، إنه -3 لأنه مشتق من التمثيل المجامعي 2.

كما نعرف 2 (x) = 1's (x) + 1 (https://delightlylinux.wordpress.com/2017/10/13/binary-lesson-12-9ones-complument-and-twos-complement/)
هدفنا هو العثور على x:
1 (x) = 2's (x) - 1 (بناء على التعبير السابق)

كما هو إجابتنا في مجاملة 2
1 (x) = 1111 1111 1111 1101 - 0000 0000 0000 0001
1 (x) = 1111 1111 1111 1100 (كيفية طرح -http://sandbox.mc.du/~bennet/cs110/pm/sub.html.)

لذلك X = 1 مجاملة للقيمة (مثل الإجابة التي حصلنا عليها تمثل مجاملة 1 من X).
X = 0000 0000 0000 0011
لذلك، وجدنا أن x هو 3 ومن ثم النتيجة السابقة للمشغل ~ 1111 1111 1111 1101هو -3 مكتوبة كجري 2 من 3.

كما قيل مسبقا ~ هو مشغل البيت وغيرها.
اختبارات المثال الخاص بك ما إذا كان modifiers يحتوي على بت غير تلك المعرفة في KeyEvent.SHIFT_MASK.

  • ~KeyEvent.SHIFT_MASK -> جميع البتات باستثناء تلك الموجودة في keyevent.shift_mask تم تعيينها على 1.
  • (modifiers & ~KeyEvent.SHIFT_MASK) -> كل 1 بت في modifiers أن "لا ينتمي" إلى KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) -> إذا كان هناك مجموعة بت واحد على الأقل إلى 1 إلى جانب KeyEvent.SHIFT_MASK قم بعمل ما...

من المستندات الرسمية http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html:

مشغل مكملا غير Autary Bither "~" ينقل نمط بعض الشيء؛ يمكن تطبيقه على أي من الأنواع المتكاملة، مما يجعل كل "0" A "1" وكل "1" A "0". على سبيل المثال، يحتوي بايت 8 بت؛ تطبيق هذا المشغل على قيمة نمط بت "00000000" من شأنه أن يغير نمطه إلى "11111111".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top