Aritmetik C#: Memahami Penukaran Jenis Tersirat dalam Penambahan Bait
Dalam C#, menambah dua nilai byte
secara tidak dijangka menghasilkan hasil int
. Ini berpunca daripada peraturan penukaran jenis tersirat bahasa semasa operasi aritmetik. Jom teroka sebabnya.
Sebab terasnya ialah kekurangan operator
langsung yang ditakrifkan untuk byte
operan. Pengkompil secara tersirat menukar kedua-dua operan byte
kepada int
sebelum melakukan penambahan. Ini menghalang kemungkinan ralat limpahan.
Pertimbangkan contoh ini:
<code class="language-csharp">byte x = 1; byte y = 2; byte z = x + y; // Compile-time error: Cannot implicitly convert type 'int' to 'byte'</code>
Pemprosesan dalaman pengkompil pada asasnya ialah:
<code class="language-csharp">int xInt = (int)x; int yInt = (int)y; int zInt = xInt + yInt;</code>
Jumlah zInt
ialah int
(32 bit), yang tidak boleh ditugaskan terus kepada byte
(8 bit) tanpa hantaran eksplisit, oleh itu ralat. Untuk membetulkan ini, hantarkan hasilnya secara eksplisit:
<code class="language-csharp">byte z = (byte)(x + y); // Explicit cast to byte</code>
Penukaran tersirat kepada int
ini melindungi daripada limpahan. Nilai byte
berjulat dari 0 hingga 255. Menambah dua nilai byte
boleh melebihi julat ini. Dengan mempromosikan kepada int
, pengkompil memastikan hasilnya sesuai dalam kapasiti integer yang lebih besar.
Walaupun kelihatan berlawanan dengan intuisi (mengapa tidak byte byte = byte
?), tingkah laku ini ialah pilihan reka bentuk yang mengutamakan pencegahan ralat. Memahami penukaran tersirat adalah penting untuk menulis kod C# yang mantap dan boleh diramal.
Atas ialah kandungan terperinci Mengapa Byte Byte = Int dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!