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
Lepaskan: 2024-12-08 04:34:10
asal
632 orang telah melayarinya

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";
}
Salin selepas log masuk

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"
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan