Если в операции присваивания оба операнда имеют один и тот же тип данных, то никакого преобразования данных не требуется. Однако, выражение слева (именующее выражение) не обязано иметь тот же тип, что и выражение справа. В этом случае делается попытка преобразования значения правого выражения к типу левого операнда.
Возможны следующие варианты использования операции присваивания, которые потребуют преобразования данных:
  1. Объект типа float или double = значение выражения типа char или int.
  2. Объект типа char или int = значение выражениея типа float или double.
  3. Объект меньшего размера = значение выражения большего размера.
  4. Объект большего размера = значение выражения меньшего размера.
В первом варианте присваивание обычно не влечет никакой потери данных. Значение выражение типа char или int будет помещено в область памяти, отведенную для float или double. При этом объект, представленный в формате целых чисел, преобразуется в формат с плавающей точкой для вещественных чисел.
Пример 1
int_var = 27;
float_var = int_var; /* float_var теперь равно 27.0*/
Гипотетически этот вид присваивания может привести к потере данных. Например, на некотором компьютере формат целых чисел типа int может содержать 10 цифр, а формат с плавающей точкой типа float – 7 значащих цифр. Присваивание переменной типа float 10-значащего целого приведет к потере точности. Для большинства компьютеров эта проблема преодолевается путем присваивания целых переменным типа double.
Во втором варианте присваивание вызывает отбрасывание дробной части. Если результат не помещается в формат типа char или int, часть значения теряется.
В третьем варианте в присваиваниях вида
данные могут быть потеряны.
В дальнейшем термин "младшие байты" и "старшие байты" относятся к двоичному представлению значения, независимо от того, в каком порядке эти байты хранятся в памяти различных процессоров.
В четвертом варианте присваивания вида
преобразование выполняется следующим образом.
Значение переносится в младший байт(ы). Обработка старшего байта(ов) зависит от знакового бита меньшего объекта и от используемого процессора.
Пример 2
Если у значения правого выражения знаковый бит равен 0, старшие байты заполняются нулями .
int_var = char_var
Рис. 1.  
Пример 3
Если у значения правого выражения знаковый бит равен 1 и правый операнд имеет знаковый тип, старшие байты заполняются единицами.
int_var = char_var
Рис. 2.  
Пример 4
Если у значения правого выражения знаковый бит равен 1 и правый операнд имеет беззнаковый тип, старшие байты заполняются нулями.
int_var = char_var
Рис. 3.