Преобразование типов происходит автоматически, когда объект одного типа используется там, где ожидается объект другого типа. Более подробная информация о преобразованиях приведена в разделе 4.11, а пока имеет смысл понять, что происходит при присвоении значения одного типа объекту другого.

Когда значение одного арифметического типа присваивается другому

bool b = 42;          // b содержит true

int i = b;            // i содержит значение 1

i = 3.14;             // i содержит значение 3

double pi = i;        // pi содержит значение 3.0

unsigned char с = -1; // при 8-битовом char содержит значение 255

signed char c2 = 256; // при 8-битовом char значение c2 не определено

происходящее зависит от диапазона значении, поддерживаемых типом.

• Когда значение одного из не логических арифметических типов присваивается объекту типа bool, результат будет false, если значением является 0, а в противном случае — true.

• Когда значение типа bool присваивается одному из других арифметических типов, будет получено значение 1, если логическим значением было true, и 0, если это было false.

• Когда значение с плавающей точкой присваивается объекту целочисленного типа, оно усекается до части перед десятичной точкой.

• Когда целочисленное (интегральное) значение присваивается объекту типа с плавающей точкой, дробная часть равна нулю. Если у целого числа больше битов, чем может вместить объект с плавающей точкой, то точность может быть потеряна.

• Если объекту беззнакового типа присваивается значение не из его диапазона, результатом будет остаток от деления по модулю значения, которые способен содержать тип назначения. Например, 8-битовый тип unsigned char способен содержать значения от 0 до 255 включительно. Если присвоить ему значение вне этого диапазона, то компилятор присвоит ему остаток от деления по модулю 256. Поэтому в результате присвоения значения -1 переменной 8-битового типа unsigned char будет получено значение 255.

• Если объекту знакового типа присваивается значение не из его диапазона, результат оказывается не определен. В результате программа может сработать нормально, а может и отказать или задействовать неверное значение.

Перейти на страницу:

Похожие книги