Учу, что называется классический си. Поставил 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 бита) , но должно выполнятся вышеприведенное нестрогое неравенство.
Все зависит от железа (процессора) для которой компилятор генерит код, операционной системы, и решений разработчиков компилятора.
> И как использовать типы 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 бита) , но должно выполнятся вышеприведенное нестрогое неравенство.
Все зависит от железа (процессора) для которой компилятор генерит код, операционной системы, и решений разработчиков компилятора.
Внутрь принтфа вы передаете ифнормацию, что передаете сигнед инт. А уж что там на самом деле - классический си ни разу не волнует. Хоть сочинения пушкина.
Похожие вопросы
- Что имеется ввиду под 4 байтами у типа данных int?(С++)
- Есть ли в программировании основные (фундаментальные) типы данных, от которых берут начало другие типы?
- Тип данных в паскале
- Перечислите основные типы данных
- C++. Типы данных. Создание типа данных.
- Что это за тип данных? (Delphi)
- Абстракция и абстрактные типы данных.
- Как проверить тип данных на си?
- Про типы данных.
- C# почему когда создаю тип данных byte - он его автоматически преобразовывает в тип int?