Почему в результате неявного преобразования мы получаем -128?

0

У нас есть следующий код C++

#include <iostream>

int main()
{
    int  A = 128;
    char B = A;
    A = B;
    std::cout << "B:= " << B << std::endl; 
    std::cout << "A:= " << A << std::endl; 
    return 0;
}

Может кто-нибудь объяснить мне, почему в результате мы получаем -128?

  • 0
    Переполнение в coz char см. в ссылке на подписанный символ, возможно ограничение от -128 до 127
  • 0
    Что происходит с unsigned char ?
Показать ещё 2 комментария
Теги:
int
char
implicit-conversion

1 ответ

3
Лучший ответ

Это потому, что в вашей системе тип char имеет диапазон -128 до 127.

128 не будет вписываться в char в этой системе, поэтому он будет преобразован (определенным реализацией) в значение -128.

Когда вы назначаете его обратно переменной int, нет никаких проблем с этим значением -128, чтобы он -128.

В примечании: в этом случае реализация преобразует значение 128 (char) -128 потому что 128 представляется в двоичном виде как 10000000, что является подписанным 8-битным представлением для -128. Это будет справедливо для большого числа реализаций.

  • 0
    Это уже понятно. Спасибо чувак.
  • 0
    Затем отметьте это как решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню