Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Базовые типы




Типы в языке Си

Вопросы и задачи для самостоятельного решения

Какие виды требований Вам известны?

В чем разница функциональных и системных требований?

Что такое организационные требования?

Составьте функциональные требования для программы расчёта периметра треугольника.

Что такое интерфейс функции? Относятся ли используемые функцией глобальный переменные к её интерфейсу?

Зачем нужна спецификация?

Описывает ли спецификация алгоритм программы?

При помощи каких приёмов требования отделяются друг от друга и от комментариев к ним?

Зачем нумеровать требования?

Составьте спецификацию для программы расчёта периметра треугольника.

Что должна обеспечивать трассируемость документации?

Зачем нужен процесс конфигурационного управления?





3 Язык программирования «Си»

Язык Си подобен обоюдоострому лезвию, при помощи которого легко создать как изысканное блюдо, так и кровавое месиво.

 

Брайан Керниган

 

Язык Си был создан в 1972 году Деннисом Ритчи в ходе разработки операционной системы (ОС) Unix. Практически вся ОС была написана на Си. Большие выразительные способности и лёгкость расширения способствовали быстрому распространению этого языка [20]. Компиляторы для языка Си доступны практически для всех существующих на данный момент ОС и платформ.

В отличие от большинства языков высокого уровня (Ада, Алгол, …), которые начинали применять только после принятия соответствующих стандартов на язык, язык Си был создан как рабочий инструмент эффективного кодирования и не претендовал на общественное использование. Спецификация языка была определена в книге Кернигана Б. и Ритчи Д. (перевод на русский язык [21]). Эта книга оставалась неформальным стандартом на язык вплоть до 1989, когда на Си был принят стандарт ANSI. На данный момент существует ещё ISO стандарт на этот язык.

В качестве отличительных особенностей языка Си можно выделить:

- препроцессорные директивы;

- необходимость определять переменные, но возможность это делать в любом месте (до первого использования переменной);

- использование фигурных скобок { и } для структуризации текста программы;

- обязательное наличие функции main().

 

Как и в любом языке программирования в Си определены базовые типы и набор механизмов, для задания произвольных пользовательских типов на основе базовых.

В качестве базовых типов в языке Си определены следующие типы.

Целочисленные:

- char – целый длиной не менее 8 бит (интерпретируется обычно как литера);

- short /short int/ – короткий целый;

- int – целый;

- long – длинный целый.

 

Для всех целочисленных типов можно определить – будут они знаковые или нет. Это делается прибавлением слова unsigned или signed перед названием типа (по умолчанию – signed).

В ранних компьютерах целые числа представлялись своим модулем и отдельным знаковым битом. В первых машинах размещали знак в младшем разряде, а когда стала возможной параллельная обработка, знак переместили в старший разряд, аналогично общепринятой бумажной нотации. Однако использование представления «знак и модуль» приводило к усложнению структуры вычислителя, поскольку для положительных и отрицательных чисел требовались разные схемы обработки.

Намного лучшее решение обеспечило представление отрицательных чисел в виде дополнения, поскольку одна и та же схема могла выполнять и сложение, и вычитание. Некоторые разработчики выбирали дополнение до единицы, когда -n получалось из n путем простого инвертирования всех бит (так называемый, обратный код). Другие выбирали дополнение до двойки, когда -n получалось путем инвертирования всех бит и прибавлением единицы. Недостатком первого способа было наличие двух форм представления нуля (0...0 и 1...1). Это неприятно, особенно, если доступные инструкции сравнения являются неадекватными. Различия этих форм показаны в Таблице 1.

 

Таблица 1. Представление в прямом, обратном и дополнительных кодах

Десятичное представление Прямой код Дополнительный код Обратный код
Знак Модуль
         
         
        000 или 111
-1        
-2        
           

 

Сегодня во всех компьютерах используется арифметика с дополнением до двойки, обычно называемая, просто дополнительным кодом. Как мы видим, у отрицательных чисел старший разряд разряд равен 1. Добавление спецификации unsigned означает, что весь код следует воспринимать как модуль числа. При этом нижняя строчка таблицы, соответствующая -2 в десятичной системе и представляющая в дополнительном коде 110, будет обрабатываться как десятичное число 6. Естественно, при signed спецификации этот же код будет обрабатываться как -2.

Числа с дробной частью можно представлять в формах с фиксированной и плавающей точкой. В современной аппаратуре для вещественных чисел обычно поддерживается арифметика с плавающей точкой, т.е. число x представляется двумя целыми числами - порядком e и мантиссой m, так что x=2em. Это позволяет значительно расширить диапазон представляемых в машине чисел.

Вещественные:

- float – вещественный одинарной точности;

- double – вещественный двойной точности;

- long double – вещественный максимальной точности.

 

Недостатком такого представления является то, что та же память теперь делится между двумя целыми числами: мантиссой числа и его порядком. Это приводит к сокращению числа разрядов мантиссы, а, следовательно, к меньшей ее точности. Более того, практически одно и то же число может теперь быть представлено разной комбинацией разрядов: чуть большим или чуть меньшим значением. То есть сравнение чисел надо производить с учетом некоторого диапазона чувствительности.

Стоит при этом помнить еще и о том, что складывая вещественные числа из различных диапазонов, очень большие и очень маленькие, каждое из которых помещается в машинное представление мы рискуем потерять младшие разряды мантиссы, а, значит, и значение малой добавки.

Разработчики аппаратуры шли на различные ухищрения для смягчения этого свойства: отказывались от хранения старшего разряда мантиссы для увеличения ее точности, переходили к удвоенной разрядной сетке, увеличивали основание порядка до 8 и даже до 16. Однако проблемы округления оставались. Известны случаи, когда в подобных машинах можно было найти такие значения x и y, что для некоторого малого положительного ε выполнялось соотношение (x+ε)*(y+ε)<(x * y), т.е. умножение утрачивало свойство монотонности.

 




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 470; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.