Каким образом borland отличается от unsigned int?Borland C/C++ cast short to unsigned int
#include <stdio.h>
void main() {
short sNum = 57000;
unsigned short usNum = sNum;
unsigned int uiNum;
printf("\r\nsNum = %d", sNum);
printf("\r\nusNum = %u", usNum);
//cast 1: short -> unsigned int
uiNum = sNum;
printf("\r\nuiNum = %u", uiNum);
//cast 2: unsigned short -> unsigned int
uiNum = (unsigned short)sNum;
printf("\r\nuiNum = %u", uiNum);
}
дает мне выход:
sNum = -8536
usNum = 57000
uiNum = 4294958760
uiNum = 57000
Почему я не получаю 57000 в гипсе 1: короткое замыкание на неподписанные Int (? Не существует никакого неявного приведения к беззнаковым незадолго до броска к неподписанным Int)?
Ok тот аргумент, но проблема в том, когда вы используете переменную с другими подписанными переменных, значение -8536 используется. – harry 2010-11-28 12:31:34
Нет, во втором случае вы получите неопределенное поведение для передачи неправильного типа `printf`. (Технически я считаю, что вы можете передать `int` вместо` unsigned`, если значение положительное, так как представления должны быть одинаковыми, но здесь `int` вы проходите (повышаемое значение` sNum `) отрицательный.) Я не вижу, чтобы он мог печатать 57000, если` int` и `short` не имеют одинакового размера. – 2010-11-28 13:22:48