لماذا لا يمكنني أن أفعل منطق منطقية على بايت؟

StackOverflow https://stackoverflow.com/questions/1011682

  •  06-07-2019
  •  | 
  •  

سؤال

في C # (3.5) وأنا أحاول ما يلي:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;

ووأحصل على خطأ 132: "لا يمكن تحويل ضمنيا النوع 'Int' إلى 'البايت' إن تحويل صريح موجود (هل مفقود يلقي؟)". والشيء نفسه يحدث مع | و^.

وماذا أفعل الخطأ؟ لماذا هو يسألني عن [إينتس]؟ لماذا لا يمكنني أن أفعل منطق منطقية على بايت؟

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

المحلول

لا أعلن

وشركات مختلفة لbyte - على حد سواء المعاملات الحصول على ترقية إلى int، والنتيجة هي int. على سبيل المثال، بالإضافة إلى ذلك:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error

لاحظ أن مهام مجمع القيام بعمل:

byte1 += byte2;

وكان هناك الأخيرة السؤال SO على هذا . وأنا أتفق وهذا هو المزعجين لا سيما لعمليات أحادي المعامل الرغم من ذلك، حيث يجب أن تكون النتيجة دائما نفس الحجم، وانها عملية منطقيا صالحة تماما.

وكحل مؤقت، يمكنك يلقي مجرد نتيجة العودة إلى البايت:

byte byte3 = (byte) (byte1 & byte2);

نصائح أخرى

ولأن بايت (وقصيرة) أنواع لا تنفذ تلك الشركات

وانظر المواصفات: 4.1.5

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