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
Lepaskan: 2024-10-31 06:48:01
asal
344 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan