Преобразование чисел без знака в числа со знаком
Объекты целочисленных типов без знака можно преобразовывать в соответствующие типы со знаком. Однако такое преобразование может приводить к неправильной интерпретации данных, если значение объекта без знака находится вне диапазона, представимого типом со знаком, как показано в следующем примере.
Пример
// conve__pluslang_Converting_Unsigned_to_Signed.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
short i;
unsigned short u = 65533;
cout << (i = u) << "\n";
}
Вывод
-3
В приведенном выше примере переменная u является целочисленным объектом типа unsigned short, который необходимо преобразовать в количественное значение со знаком, чтобы вычислить выражение (i = u). Поскольку его значение невозможно правильно представить в виде signed short, данные интерпретируются неверно.