The reason why short = short
works but short = short short
doesn’t work in C#
In programming, data type management is crucial. In C#, a common pitfall when dealing with short integers is that the =
operator behaves differently than expected on short integer variables. Let’s delve deeper into this issue.
The problem
Consider the following C# code:
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // 错误:无法隐式转换类型“int”为“short”。 // 我们也可以使用算术赋值运算符编写此代码,如下所示 a += b; // 但此代码可以成功运行,为什么? Console.Write(a);</code>
In the first line, assigning a b
to the short
variable a
will cause an error. This is because the sum of two shorts is a int
and cannot be implicitly converted to short
. However, using =
on the second line compiles successfully. Why is this?
Understanding integer arithmetic
The answer lies in the way integer arithmetic works in C#. The result of integer addition is int
, regardless of the data type of the operands. This avoids the risk of integer overflow, which could occur if the result of short short
is short
.
=
Operator
=
operator is shorthand for a = a b
. According to the C# specification, if the return type of an operator is implicitly convertible to the type of x (in this case, short
), then the operation evaluates to x = (T)(x op y)
, where T is the type of x .
For a = b
, the compiler inserts the necessary casts to convert the result of a b
(i.e., int
) to short
. This allows compound assignment to work as expected.
Conclusion
While the behavior of integer summation in C# may be confusing at first, understanding the underlying arithmetic and assignment operator rules is critical to avoiding unexpected behavior and writing robust code. By carefully managing data types and using the =
operator correctly, developers can ensure that their programs behave as expected.
The above is the detailed content of Why Does `short = short` Work While `short = short short` Doesn't in C#?. For more information, please follow other related articles on the PHP Chinese website!