قم بتشغيل الجزء الأيسر من القصور القصير
-
02-10-2019 - |
سؤال
تم تغيير السؤال الأصلي.
أرغب في إيقاف تشغيل القيمة اليسرى أكثر من القيمة القصيرة (& H8000) وترك البتات الأخرى كما هي.
Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)
ألا توجد طريقة أقصر مع مشغلي bitwise؟
عندما أفعل
Dim a = Short.MaxValue Or &H8000
أحصل على خطأ في المترجم ، لأنه يرتفع ، بدلاً من إلغاءه.
المحلول
ذلك لأن .NET يستخدم تكملة اثنين ، وليس موقعة. أن تنفي ، عليك أن تقلب الكل البتات ثم إضافة واحدة.
لو سمحت فقط استخدم Unary Minus. من فضلك ... جميلة من فضلك.
تحرير: إذا كان عليك لسبب غريب القيام بذلك مع عمليات bitwise ، فسيتعين عليك القيام بذلك:
Dim somewhatCorrect = (Short.MaxValue xor Short.MinValue) + 1;
أي بالطبع لا يزال غير bitwise لأن نفي اثنين لا يمكن القيام به بكفاءة مع مشغلي bitwise.
Edit2: وإليك أحادي ناقص:
Dim correct = -Short.MaxValue;
EDIT3: ردا على سؤال تم تحريره:
Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue
نصائح أخرى
متمم ثنائي
Dim testV As Short = &HD555S 'a test value
Dim twosC As Short 'twos comp
twosC = (testV Xor &HFFFFS) + 1S 'reverse the bits, add 1
تغيير الشيء الأكثر أهمية
twosC = twosC Xor &H8000S
لا تنتمي إلى StackOverflow