ดูรหัส 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=intlong+long=longfloat+float=floatdouble+double=double
ดังนั้นทำไมไม่:
byte+byte=byteshort+short=short?
พื้นหลังเล็กน้อย: ฉันแสดงรายการการคำนวณแบบยาวเกี่ยวกับ "ตัวเลขขนาดเล็ก" (เช่น <8) และจัดเก็บผลลัพธ์ระดับกลางในอาร์เรย์ขนาดใหญ่ การใช้อาร์เรย์ไบต์ (แทนอาร์เรย์ int) จะเร็วกว่า (เนื่องจากการแคชที่พบ) แต่การกระจายไบต์ที่กว้างขวางแพร่กระจายผ่านโค้ดทำให้ไม่สามารถอ่านได้มากขึ้น
byte1 | byte2ไม่ถือเป็นตัวเลขเลย นี่คือการรักษาพวกเขาอย่างแม่นยำเป็นรูปแบบของบิต ฉันเข้าใจมุมมองของคุณ แต่มันก็เกิดขึ้นว่าทุกครั้งที่ฉันทำเลขคณิตเป็นไบต์ใน C # ฉันจริง ๆ ถือว่าพวกเขาเป็นบิตไม่ใช่ตัวเลขและพฤติกรรมนี้มักจะเข้าทาง