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
Lepaskan: 2024-12-07 22:42:14
asal
783 orang telah melayarinya

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

Output:

vector size 0
Greater
Salin selepas log masuk

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

Output:

false
Salin selepas log masuk

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!

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