C#의 정수 오버플로 및 산술 할당 연산자: short = short
C#에서는 두 개의 short
정수를 추가하면 결과는 int
보다 값 범위가 더 넓은 short
유형이 됩니다. 두 short
정수의 합이 short
의 최대값을 초과하면 정수 오버플로가 발생합니다.
다음 코드를 고려하세요.
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // 错误:无法隐式转换类型“int”为“short”。</code>
여기서 a
과 b
의 덧셈 연산 결과는 int
유형이므로 컴파일러는 이를 암시적으로 short
유형으로 변환할 수 없습니다. 명시적인 변환 없이 int
을 short
에 할당하면 데이터가 손실되기 때문입니다.
그러나 다음 코드는 오류를 생성하지 않습니다.
<code class="language-csharp">a += b; // 但这段代码可以成功运行,为什么?</code>
이는 C#이 산술 할당 연산자 =
를 다르게 처리하기 때문입니다. =
을 사용할 때 컴파일러는 내부적으로 다음을 수행합니다.
<code class="language-csharp">a = (short)(a + b);</code>
컴파일러는 결과를 a
에 할당하기 전에 자동으로 더하기 연산의 결과를 short
유형으로 변환합니다. 이렇게 하면 중간 결과가 int
유형인 경우에도 값이 short
변수에 올바르게 저장됩니다.
이 동작은 결과를 왼쪽 피연산자의 유형으로 자동 변환하는 -=
, *=
, /=
등의 다른 복합 할당 연산자와 유사합니다.
따라서 산술 할당 연산자 short
는 합계가 =
의 범위를 초과하더라도 short
변수에 안전하게 사용할 수 있습니다. 컴파일러는 정수 오버플로 오류를 방지하기 위해 내부적으로 유형 변환을 처리합니다.
위 내용은 `short = short`는 C#에서 작동하지만 `short = short short`는 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!