이 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 #에서 바이트에 대해 산술을 할 때마다 실제로는 숫자가 아닌 비트로 취급하고 있으며,이 동작은 항상 방해가됩니다.