Penukaran daripada bool kepada int: Nilai Dijamin 0 atau 1
Salah tanggapan biasa timbul apabila menukar nilai bool kepada int. Walaupun banyak pengkompil nampaknya menyimpan boolean sebagai 0 atau 1, persoalannya kekal: adakah tingkah laku ini dijamin?
Soalan:
Pertimbangkan coretan kod C berikut:
int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?
Apakah nilai c: 4 atau 5?
Jawapan:
Ya, c akan sentiasa 4 dalam C dan C.
Penjelasan:
-
C : Mengikut piawaian C (§4.5/4), "Nilai r jenis bool boleh ditukar kepada nilai r jenis int, dengan salah menjadi sifar dan benar menjadi satu." Oleh itu, b ditukar kepada 0.
-
C: Dalam C (§6.3.1.2/1), "Apabila sebarang nilai skalar ditukar kepada _Bool, hasilnya ialah 0 jika nilai membandingkan sama dengan 0; jika tidak, hasilnya ialah 1." Ini menunjukkan bahawa a ditukar kepada 1 dan disimpan dalam b.
-
Penukaran kepada int: Menukar daripada _Bool kepada int adalah mudah kerana int boleh memegang kedua-dua 0 dan 1 (§6.3.1.3) . Dalam kedua-dua kes, nilai b kekal tidak berubah, menyebabkan c menjadi 3 0 = 4.
Atas ialah kandungan terperinci Apakah nilai `c` dalam kod C/C berikut: `int a = 2; bool b = a; int c = 3 b;`?. 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