Предположим, у вас естьКак работает литье отрицательного числа на более широкий тип?
short num = -10;
int num_casted = (int)num;
std::cout << num_casted << endl; // prints -10.
Интересно, почему num_casted
еще -10
и не 0xFA000000
.
Как отрицательное число меньшего типа преобразуется в biggen? Кто-нибудь просветит меня? Я предполагаю, что существует некоторая логика, за исключением заполнения пробела нулями ...
Это наименее удивительный способ, действительно. 'num' имеет значение -10, поэтому' num_casted' является представлением 'int' -10. – chris
[Расширение знака] (https://en.wikipedia.org/wiki/Sign_extension). Это преобразование значений, а не немного переинтерпретация, поэтому работа выполняется для того, чтобы вы могли получить согласованный '-10' вместо смещенного мусора. – Quentin
Если вы конвертируете в более крупный тип той же подписанности, то этот более крупный тип может обязательно представлять одно и то же значение, поэтому он преобразуется в представление, имеющее то же значение. – user2079303