Rumah >pembangunan bahagian belakang >C++ >Seberapa Mudah Alih Penukaran Boolean kepada Integer dalam C dan C?

Seberapa Mudah Alih Penukaran Boolean kepada Integer dalam C dan C?

Barbara Streisand
Barbara Streisandasal
2024-12-05 01:09:111069semak imbas

How Portable is Boolean to Integer Conversion in C and C  ?

Penukaran bool to int: Menyelam Dalam Kemudahalihannya

Soalan Asal:

Sejauh manakah mudah alih penukaran nilai bool kepada int? Bolehkah kita yakin bahawa pernyataan berikut melepasi semua sistem?

int x = 4 < 5;
assert(x == 1);

x = 4 > 5;
assert(x == 0);

Jawapan:

Ya, penukaran bool kepada int adalah mudah alih sepenuhnya dan mematuhi kedua-dua C dan C piawaian.

Penjelasan:

Dalam C , penukaran daripada bool kepada int adalah tersirat, seperti yang dinyatakan dalam Piawaian C (§4.7/4 daripada C 11 atau 14 Piawaian, §7.8/4 daripada Piawaian C 17, §7.3.9/2 daripada Piawaian 20). Mengikut piawaian ini:

  • Salah ditukar kepada sifar.
  • Benar ditukar kepada satu.

Dalam contoh kami:

int x = 4 < 5;

Tepat diterjemahkan kepada:

int x = true;

Memandangkan benar ialah ditukar kepada satu, penegasan akan lulus. Begitu juga, dalam penegasan kedua, palsu ditukar kepada sifar, menghasilkan penegasan kejayaan.

Maklumat Tambahan untuk C:

Sebelum C99, C tidak mempunyai jenis bool. Walau bagaimanapun, C99 memperkenalkan jenis _Bool dan bool makro (ditakrifkan dalam fail pengepala stdbool.h) yang berkembang kepada _Bool. Makro benar dan salah juga ditakrifkan dalam fail pengepala yang sama, di mana benar berkembang kepada pemalar integer 1, dan palsu berkembang kepada pemalar integer 0.

Menurut §7.16 daripada C99:

#define bool _Bool
#define true 1
#define false 0

Oleh itu, penukaran bool kepada int dalam C99 dan kemudiannya berkelakuan serupa dengan C .

Atas ialah kandungan terperinci Seberapa Mudah Alih Penukaran Boolean kepada Integer dalam C dan C?. 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