Код IT
← Каталог

Типы данных в C++ — `signed` и `unsigned`

Фрагмент из «Типы данных в C++»: `signed` и `unsigned`.

C++ main.cpp
#include <iostream>
#include <type_traits>

void handleChar(char c) {
    std::cout << "char: " << static_cast<int>(c) << '\n';
}

void handleSignedChar(signed char c) {
    std::cout << "signed char: " << static_cast<int>(c) << '\n';
}

void handleUnsignedChar(unsigned char c) {
    std::cout << "unsigned char: " << static_cast<int>(c) << '\n';
}

int main() {
    // Эти три вызова могут вести к разным перегрузкам!
    char a = -1;
    signed char b = -1;
    unsigned char c = 255; // эквивалентно -1 в signed, но не в unsigned

    handleChar(a);          // вызывает handleChar
    handleSignedChar(b);    // вызывает handleSignedChar
    handleUnsignedChar(c);  // вызывает handleUnsignedChar

    // Проверка различий на уровне типов
    std::cout << "\nТипы различны:\n";
    std::cout << "char == signed char?   " << std::is_same_v<char, signed char> << '\n';
    std::cout << "char == unsigned char? " << std::is_same_v<char, unsigned char> << '\n';

    return 0;
}
#include <iostream>
#include <type_traits>

void handleChar(char c) {
    std::cout << "char: " << static_cast<int>(c) << '\n';
}

void handleSignedChar(signed char c) {
    std::cout << "signed char: " << static_cast<int>(c) << '\n';
}

void handleUnsignedChar(unsigned char c) {
    std::cout << "unsigned char: " << static_cast<int>(c) << '\n';
}

int main() {
    // Эти три вызова могут вести к разным перегрузкам!
    char a = -1;
    signed char b = -1;
    unsigned char c = 255; // эквивалентно -1 в signed, но не в unsigned

    handleChar(a);          // вызывает handleChar
    handleSignedChar(b);    // вызывает handleSignedChar
    handleUnsignedChar(c);  // вызывает handleUnsignedChar

    // Проверка различий на уровне типов
    std::cout << "\nТипы различны:\n";
    std::cout << "char == signed char?   " << std::is_same_v<char, signed char> << '\n';
    std::cout << "char == unsigned char? " << std::is_same_v<char, unsigned char> << '\n';

    return 0;
}