Peraturan Promosi untuk Operator Binari yang Ditandatangani dan Tidak Ditandatangani
Pertimbangkan coretan kod berikut:
// Snippet 1 int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
// Snippet 2 unsigned int us = 42; int neg = -43; int result = us + neg;
Bagaimanakah pengendali " " menentukan jenis hasil yang betul dalam kes ini, memandangkan tanda tanda yang berbeza operan?
Pengendali mengikut peraturan "penukaran aritmetik biasa", yang menentukan langkah penukaran jenis berdasarkan jenis operan. Mengikut peraturan ini, jika mana-mana operan ialah:
Sejak int dan unsigned int boleh ditukar ganti dalam peraturan, operan dengan jenis yang lebih luas (unsigned int) dipilih sebagai jenis hasil.
Ini menerangkan sebab dalam Coretan 1, hasilnya tidak ditandatangani int (2147483648) dan dalam Coretan 2, hasilnya adalah int (-1). Operan yang ditandatangani (neg) ditukar secara tersirat kepada int tidak ditandatangani, menghasilkan nilai yang tidak ditentukan dalam kes kedua.
Atas ialah kandungan terperinci Bagaimanakah Penukaran Aritmetik Biasa Menentukan Jenis Keputusan Perduaan \' \' Operator dengan Operan Bertanda dan Tidak Bertanda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!