Rumah >pembangunan bahagian belakang >C++ >Apakah Perwakilan Perangkap dalam C dan C , dan Adakah Terapung Bersaiz Sama dan Penunjuknya Berkongsi Perwakilan Perduaan Yang Sama?

Apakah Perwakilan Perangkap dalam C dan C , dan Adakah Terapung Bersaiz Sama dan Penunjuknya Berkongsi Perwakilan Perduaan Yang Sama?

DDD
DDDasal
2024-12-18 22:45:20730semak imbas

What are Trap Representations in C and C  , and Do Identical-Sized Floats and Their Pointers Share the Same Binary Representation?

Perwakilan Perangkap

Soalan:

  1. Apakah itu "perwakilan perangkap" dalam C?
  2. Adakah ini terpakai kepada C ?
  3. Adakah dua pembolehubah, satu apungan dan satu penunjuk ke apungan, mempunyai perwakilan binari yang sama jika ia mempunyai saiz yang sama?

Jawapan:

1. Perwakilan Perangkap:

Dalam C, perwakilan perangkap ialah corak sedikit yang sesuai dengan saiz jenis tetapi menyebabkan gelagat tidak ditentukan jika digunakan sebagai nilai jenis tersebut. Tiada jenis diperlukan untuk mempunyai perwakilan perangkap, tetapi satu-satunya jenis yang dijamin tidak mempunyainya ialah aksara tidak ditandatangani.

Contoh perwakilan perangkap ialah NaN isyarat dalam jenis titik terapung. Corak ini tidak ditentukan dalam C99.

2. Kebolehgunaan kepada C :

Walaupun soalan tidak menyebut C , perlu diingat bahawa konsep perwakilan perangkap juga terpakai kepada C.

3. Perwakilan Perduaan Apungan dan Penunjuk:

Kod yang disediakan di bawah menunjukkan tingkah laku yang tidak ditentukan:

float f = 3.5;
int *pi = (int*)&f;

Walau bagaimanapun, tingkah laku ini tidak berkaitan dengan perwakilan perangkap. Untuk mendapatkan nilai integer dengan corak bit yang sama seperti float, gunakan kod berikut:

int extract_int(float f)
{
    union { int i; float f; } u;
    u.f = f;
    return u.i;
}

Kod ini mempamerkan tingkah laku yang tidak ditentukan dalam C99, bermakna piawaian tidak mentakrifkan nilai integer tepat yang dihasilkan, tetapi ia menjamin bahawa nilai integer yang sah diperolehi. Oleh itu, perwakilan binari apungan dan integer yang diperoleh menggunakan kesatuan tidak dijamin sama.

Atas ialah kandungan terperinci Apakah Perwakilan Perangkap dalam C dan C , dan Adakah Terapung Bersaiz Sama dan Penunjuknya Berkongsi Perwakilan Perduaan Yang Sama?. 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