Rumah >pembangunan bahagian belakang >C++ >Mengapakah `short = short` Berfungsi dalam C# Manakala `short = short short` Tidak?
Limpahan integer dan operator penugasan aritmetik dalam C#: short = short
Dalam C#, apabila dua short
integer ditambah, hasilnya akan menjadi jenis int
dengan julat nilai yang lebih besar daripada short
. Limpahan integer berlaku jika jumlah dua short
integer melebihi nilai maksimum short
.
Pertimbangkan kod berikut:
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // 错误:无法隐式转换类型“int”为“short”。</code>
Di sini, hasil operasi penambahan a
dan b
adalah daripada jenis int
, dan pengkompil tidak boleh secara tersirat menukarnya kepada menaip short
. Ini kerana menugaskan int
kepada short
tanpa penukaran yang jelas mengakibatkan kehilangan data.
Walau bagaimanapun, kod berikut tidak menghasilkan ralat:
<code class="language-csharp">a += b; // 但这段代码可以成功运行,为什么?</code>
Ini kerana C# mengendalikan operator tugasan aritmetik =
secara berbeza. Apabila menggunakan =
, pengkompil secara dalaman melakukan perkara berikut:
<code class="language-csharp">a = (short)(a + b);</code>
Pengkompil akan secara automatik menukar hasil operasi penambahan kepada jenis a
sebelum memberikan hasil kepada short
. Ini memastikan bahawa nilai disimpan dengan betul dalam pembolehubah int
walaupun hasil perantaraan adalah jenis short
.
Tingkah laku ini serupa dengan pengendali tugasan kompaun lain, seperti -=
, *=
dan /=
, yang secara automatik menukar hasil kepada jenis operan kiri.
Oleh itu, pengendali tugasan aritmetik short
boleh digunakan dengan selamat pada =
pembolehubah walaupun jumlahnya melebihi julat short
. Pengkompil mengendalikan penukaran jenis secara dalaman untuk mengelakkan ralat limpahan integer.
Atas ialah kandungan terperinci Mengapakah `short = short` Berfungsi dalam C# Manakala `short = short short` Tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!