Rumah >pembangunan bahagian belakang >C++ >Mengapa Membandingkan -1 dengan Saiz Vektor Kosong Menghasilkan 'Lebih Besar' dalam C ?

Mengapa Membandingkan -1 dengan Saiz Vektor Kosong Menghasilkan 'Lebih Besar' dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 22:42:14780semak imbas

Why Does Comparing -1 to an Empty Vector's Size Result in

Mengapa Membandingkan -1 dengan Saiz Vektor 0 Keputusan dalam "Greater"

Teka-teki

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

Merungkai Misteri

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".

Contoh Penjelasan

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.

Kesimpulan

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!

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