Преобразование типов происходит автоматически, когда объект одного типа используется там, где ожидается объект другого типа. Более подробная информация о преобразованиях приведена в разделе 4.11, а пока имеет смысл понять, что происходит при присвоении значения одного типа объекту другого.
Когда значение одного арифметического типа присваивается другому
bool b = 42; //
int i = b; //
i = 3.14; //
double pi = i; //
unsigned char с = -1; //
signed char c2 = 256; //
происходящее зависит от диапазона значении, поддерживаемых типом.
• Когда значение одного из не логических арифметических типов присваивается объекту типа bool
, результат будет false
, если значением является 0
, а в противном случае — true
.
• Когда значение типа bool
присваивается одному из других арифметических типов, будет получено значение 1
, если логическим значением было true
, и 0
, если это было false
.
• Когда значение с плавающей точкой присваивается объекту целочисленного типа, оно усекается до части перед десятичной точкой.
• Когда целочисленное (интегральное) значение присваивается объекту типа с плавающей точкой, дробная часть равна нулю. Если у целого числа больше битов, чем может вместить объект с плавающей точкой, то точность может быть потеряна.
• Если объекту беззнакового типа присваивается значение не из его диапазона, результатом будет остаток от деления по модулю значения, которые способен содержать тип назначения. Например, 8-битовый тип unsigned char
способен содержать значения от 0 до 255 включительно. Если присвоить ему значение вне этого диапазона, то компилятор присвоит ему остаток от деления по модулю 256. Поэтому в результате присвоения значения -1 переменной 8-битового типа unsigned char
будет получено значение 255.
• Если объекту знакового типа присваивается значение не из его диапазона, результат оказывается