Nhìn vào mã C # này:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
Kết quả của bất kỳ phép toán nào được thực hiện trên các loại byte
(hoặc short
) đều được truyền lại thành một số nguyên. Giải pháp là đưa kết quả rõ ràng trở lại một byte:
byte z = (byte)(x + y); // this works
Điều tôi đang tự hỏi là tại sao? Có phải kiến trúc không? Triết học?
Chúng ta có:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
Vậy tại sao không:
byte
+byte
=byte
short
+short
=short
?
Một chút nền tảng: Tôi đang thực hiện một danh sách dài các phép tính trên "số nhỏ" (tức là <8) và lưu trữ các kết quả trung gian trong một mảng lớn. Sử dụng một mảng byte (thay vì một mảng int) sẽ nhanh hơn (vì các lần truy cập bộ đệm). Nhưng các byte byte rộng rãi trải đều qua mã làm cho nó khó đọc hơn nhiều.
byte1 | byte2
không coi chúng là những con số. Điều này được coi là chính xác như các mẫu của bit. Tôi hiểu quan điểm của bạn, nhưng thực tế là mỗi lần tôi thực hiện bất kỳ số học nào về byte trong C #, tôi thực sự coi chúng là bit, không phải số và hành vi này luôn xảy ra.