Другие языки программирования и технологии

Вопрос про типы данных

Учу, что называется классический си. Поставил MS-DOS на виртуалку и врубил Turbo C 2.0
Задаю тип int: работает правильно от -32768 до 32767
Задаю тип unsigned int: работает также от -32768 до 32767, а не от о и до 65535. Иными словами задаю unsigned int значение равное 32768, а он мне все равно знак минус сует. Тоже самое и с long int. И если просто long писать, то все равно будет также.
Вывожу через: printf("%d", i); -- может параметр другой надо?
В чем собственно трабл? И как использовать типы long и unsigned?

И попутно задам второй вопрос, Turbo C на каком стандарте работает? ANSI C или С99?
printf("%u", i);

> И как использовать типы long и unsigned?
Точно также, как и обыкновенный int, с учетом того, что long в Turbo C 32 бита, а unsigned беззнаковое.
Спецификаторы для вывода:
long int %ld
unsigned long int %lu

> Turbo C на каком стандарте работает? ANSI C или С99?
Близко к C89 и К&R
Лучше поставьте современный компилятор, типа GCC (MinGW), там и С99 можно включить и частичная поддержка последнего стандарта есть (С11).

Update:
> А как 32 бита в long int использовать?
Если не хватает 16 бит, т. е. получающиеся результаты при целочисленных вычислениях не влезают в 16 бит, то тогда используйте long.

> И еще, зачем сделали тип short если в 16-битных системах он равен int, а 32-битных тогда еще не было?
По стандарту эти типы должны присутствовать, причем:
sizeof(short) <= sizeof(int) <= sizeof(long)
т. е. их размер не определен в стандарте языка (в отличие к примеру от Java, где int всегда 32 бита) , но должно выполнятся вышеприведенное нестрогое неравенство.
Все зависит от железа (процессора) для которой компилятор генерит код, операционной системы, и решений разработчиков компилятора.
ВС
Владимир Студеникин
55 707
Лучший ответ
Внутрь принтфа вы передаете ифнормацию, что передаете сигнед инт. А уж что там на самом деле - классический си ни разу не волнует. Хоть сочинения пушкина.