Dalam C , coretan kod berikut menghasilkan keluaran yang tidak dijangka daripada "Lebih Besar":
#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"; }
Output:
vector size 0 Greater
Sebab di sebalik tingkah laku berlawanan intuitif ini terletak pada perbezaan jenis antara nilai yang dibandingkan. a.size() mengembalikan integer tidak bertanda, mewakili saiz bukan negatif vektor. Sebaliknya, b ialah integer bertanda, memegang nilai negatif -1.
Apabila membandingkan kedua-dua nilai ini, C melakukan promosi tersirat kepada tidak ditandatangani. Akibatnya, b dinaikkan pangkat kepada integer tak bertanda besar, yang kemudiannya dibandingkan dengan a.size() yang tidak ditandatangani. Nilai besar yang tidak ditandatangani melebihi 0, yang membawa kepada output "Lebih Besar".
Tingkah laku ini boleh diilustrasikan lagi dengan kod berikut:
#include <iostream> int main() { unsigned int a = 0; int b = -1; std::cout << std::boolalpha << (b < a) << "\n"; }
Output:
false
Di sini, kami terus membandingkan jenis tidak bertanda (a) dengan bertanda jenis (b). Nilai negatif b dinaikkan kepada integer tidak bertanda besar, yang dianggap lebih besar daripada a tidak bertanda dengan nilai 0.
Memahami perbezaan jenis dan peraturan promosi tersirat ialah penting untuk bekerja dengan nilai yang ditandatangani dan tidak ditandatangani dalam C . Apabila membandingkan integer pelbagai jenis, adalah penting untuk mempertimbangkan cara ia dipromosikan dan sama ada perbandingan yang terhasil adalah bermakna.
Atas ialah kandungan terperinci Mengapa Membandingkan -1 dengan Saiz Vektor Kosong Menghasilkan 'Lebih Besar' dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!