سؤال

تم تغيير السؤال الأصلي.

أرغب في إيقاف تشغيل القيمة اليسرى أكثر من القيمة القصيرة (& 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top