ดูรหัส C # นี้:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
ผลลัพธ์ของคณิตศาสตร์ใด ๆ ที่ดำเนินการกับประเภทbyte
(หรือshort
) จะถูกแปลงกลับไปเป็นจำนวนเต็มโดยปริยาย วิธีแก้ปัญหาคือการส่งผลลัพธ์กลับไปที่ไบต์อย่างชัดเจน:
byte z = (byte)(x + y); // this works
สิ่งที่ฉันสงสัยคือเพราะอะไร มันเป็นสถาปัตยกรรมหรือไม่? ปรัชญา?
เรามี:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
ดังนั้นทำไมไม่:
byte
+byte
=byte
short
+short
=short
?
พื้นหลังเล็กน้อย: ฉันแสดงรายการการคำนวณแบบยาวเกี่ยวกับ "ตัวเลขขนาดเล็ก" (เช่น <8) และจัดเก็บผลลัพธ์ระดับกลางในอาร์เรย์ขนาดใหญ่ การใช้อาร์เรย์ไบต์ (แทนอาร์เรย์ int) จะเร็วกว่า (เนื่องจากการแคชที่พบ) แต่การกระจายไบต์ที่กว้างขวางแพร่กระจายผ่านโค้ดทำให้ไม่สามารถอ่านได้มากขึ้น
byte1 | byte2
ไม่ถือเป็นตัวเลขเลย นี่คือการรักษาพวกเขาอย่างแม่นยำเป็นรูปแบบของบิต ฉันเข้าใจมุมมองของคุณ แต่มันก็เกิดขึ้นว่าทุกครั้งที่ฉันทำเลขคณิตเป็นไบต์ใน C # ฉันจริง ๆ ถือว่าพวกเขาเป็นบิตไม่ใช่ตัวเลขและพฤติกรรมนี้มักจะเข้าทาง