Heim >Backend-Entwicklung >C++ >Wie geht C mit Vergleichen zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlen um?

Wie geht C mit Vergleichen zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlen um?

Linda Hamilton
Linda HamiltonOriginal
2024-12-07 00:16:11999Durchsuche

How Does C   Handle Comparisons Between Signed and Unsigned Integers?

Vergleich von vorzeichenbehafteten und vorzeichenlosen Typen in C

In C wird beim Vergleich einer vorzeichenbehafteten Ganzzahl mit einer vorzeichenlosen Ganzzahl die vorzeichenbehaftete Ganzzahl zu einer vorzeichenlosen Ganzzahl heraufgestuft. Dies bedeutet, dass das negative Vorzeichen ignoriert wird und die Ganzzahl als großer positiver Wert behandelt wird.

Betrachten Sie das folgende C-Programm:

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

In diesem Programm ist die Größe des Vektors a ist eine vorzeichenlose Ganzzahl. Beim Vergleich mit der vorzeichenbehafteten Ganzzahl b wird b jedoch zu einer vorzeichenlosen Ganzzahl heraufgestuft. Das bedeutet, dass das negative Vorzeichen ignoriert wird und b als großer positiver Wert behandelt wird. Daher ist der Vergleich b < a.size() ist immer falsch und das Programm gibt „Größer“ aus.

Um dieses Verhalten deutlicher zu sehen, betrachten Sie das folgende Codebeispiel:

#include <iostream>

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

Dieses Programm wird Ausgabe falsch, obwohl b offensichtlich kleiner als a ist. Dies liegt daran, dass b zu einer vorzeichenlosen Ganzzahl heraufgestuft wird und das negative Vorzeichen ignoriert wird.

Das obige ist der detaillierte Inhalt vonWie geht C mit Vergleichen zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn