لماذا لا يمكنني أن أفعل منطق منطقية على بايت؟
-
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