Rumah >pembangunan bahagian belakang >C++ >Mengapa Membandingkan Integer Negatif dengan Integer Tidak Bertanda dalam C Menghasilkan Keputusan Yang Tidak Dijangka?

Mengapa Membandingkan Integer Negatif dengan Integer Tidak Bertanda dalam C Menghasilkan Keputusan Yang Tidak Dijangka?

Linda Hamilton
Linda Hamiltonasal
2024-12-08 04:34:10665semak imbas

Why Does Comparing a Negative Integer to an Unsigned Integer in C   Yield Unexpected Results?

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!

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