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
Linda Hamiltonasal
2024-12-07 00:16:11995semak imbas

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";
}

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";
}

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!

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