جافا: ماذا يعني ~
-
18-09-2019 - |
سؤال
في هذا الرمز المصدر Java لدي هذا الخط:
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
ماذا تيلد ~
يعني؟
المحلول
tilde (~
) يؤدي تكمل بسيط من القيمة العددية في جافا.
نصائح أخرى
انها 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".