> 백엔드 개발 > C++ > `short = short`는 C#에서 작동하지만 `short = short short`는 작동하지 않는 이유는 무엇입니까?

`short = short`는 C#에서 작동하지만 `short = short short`는 작동하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-23 08:52:10
원래의
986명이 탐색했습니다.

Why Does `short  = short` Work in C# While `short = short   short` Doesn't?

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>
로그인 후 복사

여기서 ab의 덧셈 연산 결과는 int 유형이므로 컴파일러는 이를 암시적으로 short 유형으로 변환할 수 없습니다. 명시적인 변환 없이 intshort에 할당하면 데이터가 손실되기 때문입니다.

그러나 다음 코드는 오류를 생성하지 않습니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿