Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah nilai `c` dalam kod C/C berikut: `int a = 2; bool b = a; int c = 3 b;`?

Apakah nilai `c` dalam kod C/C berikut: `int a = 2; bool b = a; int c = 3 b;`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-19 20:53:02934semak imbas

What is the value of `c` in the following C/C   code: `int a = 2; bool b = a; int c = 3   b;`?

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