Perbandingan Negatif dengan Positif Unsigned Int?
Dalam C , kita sering menghadapi situasi di mana nilai pelbagai jenis dibandingkan. Walau bagaimanapun, memahami cara perbandingan ini berkelakuan boleh menjadi rumit.
Pertimbangkan kod ini:
#include <iostream> #include <vector> int main() { std::vector<int> a; std::cout << "vector size " << a.size() << std::endl; int b = -1; if (b < a.size()) std::cout << "Less"; else std::cout << "Greater"; }
Kod mencetak "Lebih Besar," walaupun "-1" jelas kurang daripada "0. " Mengapa ini berlaku?
Kuncinya terletak pada jenis data berbeza yang terlibat. a.size() mengembalikan integer tidak bertanda, manakala b ialah integer bertanda negatif. Apabila membandingkan kedua-dua jenis ini, integer bertanda negatif dinaikkan kepada integer tidak bertanda. Ini menyebabkan nilai tidak bertanda besar dibandingkan dengan 0, yang jelas lebih besar.
Untuk menggambarkan perkara ini dengan lebih lanjut, mari lihat contoh berikut:
#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; // prints "false" }
Dalam kes ini, hasilnya adalah "palsu," seperti yang dijangkakan. Ini kerana kedua-dua a dan b dinaikkan pangkat kepada integer tidak bertanda, dan "-1" kini merupakan nilai tidak bertanda besar yang lebih besar daripada 0.
Atas ialah kandungan terperinci Mengapa Membandingkan Integer Negatif dengan Integer Tidak Bertanda dalam C Menghasilkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!