Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah C Mengendalikan Perbandingan Antara Integer Bertanda dan Tidak Bertanda?

Bagaimanakah C Mengendalikan Perbandingan Antara Integer Bertanda dan Tidak Bertanda?

Linda Hamilton
Lepaskan: 2024-12-07 00:16:11
asal
1000 orang telah melayarinya

How Does C   Handle Comparisons Between Signed and Unsigned Integers?

Perbandingan Jenis Ditandatangani dan Tidak Ditandatangani dalam C

Dalam C , apabila membandingkan integer yang ditandatangani dengan integer yang tidak ditandatangani, integer yang ditandatangani dinaikkan kepada integer yang tidak ditandatangani. Ini bermakna tanda negatif diabaikan dan integer dianggap sebagai nilai positif yang besar.

Pertimbangkan program C berikut:

#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

Dalam atur cara ini, saiz vektor a ialah integer tidak bertanda. Walau bagaimanapun, apabila membandingkannya dengan integer yang ditandatangani b, b dinaikkan pangkat kepada integer yang tidak ditandatangani. Ini bermakna tanda negatif diabaikan dan b dianggap sebagai nilai positif yang besar. Oleh itu, perbandingan b < a.size() akan sentiasa palsu dan program akan mencetak "Greater."

Untuk melihat tingkah laku ini dengan lebih jelas, pertimbangkan contoh kod berikut:

#include <iostream>

int main()
{
    unsigned int a = 0;
    int b = -1;
    std::cout << std::boolalpha;
    std::cout << (b < a) << "\n";
}
Salin selepas log masuk

Atur cara ini akan output palsu, walaupun b jelas kurang daripada a. Ini kerana b dinaikkan kepada integer tidak bertanda dan tanda negatif diabaikan.

Atas ialah kandungan terperinci Bagaimanakah C Mengendalikan Perbandingan Antara Integer Bertanda dan Tidak Bertanda?. 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