Rumah >pembangunan bahagian belakang >Golang >Mengapakah Menukar uint8 kepada int8 dengan Gagal Malar dalam Go?

Mengapakah Menukar uint8 kepada int8 dengan Gagal Malar dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 06:48:01324semak imbas

Why Does Converting uint8 to int8 with a Constant Fail in Go?

Kekeliruan tentang Menukar uint8 kepada int8

Apabila menukar uint8 (integer 8-bit tidak ditandatangani) kepada int8 (integer 8-bit yang ditandatangani ), hasilnya mungkin tidak selalu seperti yang diharapkan. Artikel ini meneroka perbezaan antara dua pendekatan berikut dan menerangkan sebab yang pertama menimbulkan ralat kompilasi:

<code class="go">a := int8(0xfc) // compile error
// deferring type conversion
a := 0xfc
b := int8(a) </code>

Perbezaan Antara Kod

Perbezaan antara kedua-dua kod tersebut terletak pada susunan operasi:

  • Dalam contoh pertama, penukaran jenis (int8(0xfc)) berlaku sebelum tugasan, manakala dalam contoh kedua, tugasan (a := 0xfc ) berlaku sebelum penukaran jenis (int8(a)).

Ralat Kompilasi dalam Kod Pertama

Kod pertama menimbulkan ralat kompilasi kerana pemalar 0xfc melebihi julat jenis int8. int8 boleh mewakili nilai antara -128 dan 127, manakala 0xfc ialah 252 dalam perpuluhan, yang melebihi julat ini. Menurut spesifikasi bahasa Go, ungkapan pemalar mesti sentiasa boleh diwakili dengan tepat oleh nilai jenis pemalar.

Ungkapan Malar yang Sah dan Tidak Sah

Rujuk https:// golang.org/ref/spec#Constant_expressions untuk penjelasan terperinci tentang ungkapan pemalar yang sah dan tidak sah. Catatan blog di https://blog.golang.org/constants memberikan cerapan tambahan tentang pengehadan jenis integer dan kepentingan pemalar semakan jenis untuk menangkap ralat.

Menyelesaikan Isu Penukaran

Jika matlamat anda adalah untuk menukar bait (iaitu uint8) kepada int32 sambil mempertimbangkan tandanya, pendekatan yang disyorkan ialah menukarnya terlebih dahulu kepada int8 dan kemudian kepada int32:

<code class="go">var b byte = 0xff
i32 := int32(int8(b)) // -1</code>

Atas ialah kandungan terperinci Mengapakah Menukar uint8 kepada int8 dengan Gagal Malar dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn