У нас есть следующий код 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?
Это потому, что в вашей системе тип char
имеет диапазон -128
до 127
.
128
не будет вписываться в char
в этой системе, поэтому он будет преобразован (определенным реализацией) в значение -128
.
Когда вы назначаете его обратно переменной int
, нет никаких проблем с этим значением -128
, чтобы он -128
.
В примечании: в этом случае реализация преобразует значение 128
(char) -128
потому что 128
представляется в двоичном виде как 10000000
, что является подписанным 8-битным представлением для -128
. Это будет справедливо для большого числа реализаций.
unsigned char
?