Rumah > Artikel > pembangunan bahagian belakang > Mengapakah penukaran pemalar uint8 kepada int8 secara langsung menyebabkan ralat penyusunan, tetapi ia berfungsi jika penukaran dilakukan selepas tugasan?
Kekeliruan tentang Menukar uint8 kepada int8
Soalan:
Kod berikut cuba menukar pemalar uint8 kepada int8, tetapi menghadapi ralat kompilasi:
<code class="go">package main func main() { a := int8(0xfc) // compile error: constant 252 overflows int8 _ = a }</code>
Sebaliknya, kod berikut tidak menimbulkan ralat jika anda menangguhkan penukaran jenis selepas tugasan:
<code class="go">package main func main() { a := 0xfc b := int8(a) // ok _ = b }</code>
Apakah perbezaan antara kedua-dua kod ini? Juga, mengapa kod pertama memberikan ralat kompilasi?
Jawapan:
Dalam kod pertama, pemalar 0xfc dinilai sebelum ditukar kepada taip int8. 0xfc ialah nilai yang sesuai dengan uint8, tetapi bukan int8. Oleh itu, pengkompil menjana ralat "constant 252 overflows int8".
Dalam kod kedua, penukaran jenis berlaku selepas tugasan dibuat. Ini menilai a sebagai jenis uint8 dan kemudian menukarnya kepada jenis int8. Oleh itu, tiada ralat berlaku.
Kesimpulan:
Jika anda ingin menukar uint8 kepada int8, anda perlu memastikan bahawa nilai pemalar berada dalam julat int8 sebelum menukar. Jika tidak, ralat penyusunan akan berlaku.
Atas ialah kandungan terperinci Mengapakah penukaran pemalar uint8 kepada int8 secara langsung menyebabkan ralat penyusunan, tetapi ia berfungsi jika penukaran dilakukan selepas tugasan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!