КАТЕГОРИИ: Архитектура-(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) |
Целые типы
Числовые типы С помощью целых чисел может быть представлено количество объектов, являющихся дискретными по своей природе (т.е. счетное число объектов). ПРЕДСТАВЛЕНИЕ В ПАМЯТИ. Для представления чисел со знаком в ряде компьютеров был использован метод, называемый методом знака и значения. Обычно для знака отводится первый (или самый левый) бит двоичного числа, затем следует запись самого числа. Например, +10 и -15 в двоичном виде можно представить так:
Отметим, что по соглашению 0 используется для представления знака плюс и 1 - для минуса. Такое представление удобно для программистов, т.к. легко воспринимается; но не является экономичным, поскольку при выполнении операций сложения и вычитания необходимо вначале определять знак каждого числа. Например, сложение чисел +6 и -7 на самом деле подразумевает операцию вычитания, а вычитание -6 из +7 операцию сложения. Для анализа знакового бита требуется особая схема, и, кроме того, при представлении числа в виде знака и величины необходимы отдельные устройства для сложения и вычитания, т.е. если положительное и отрицательные числа представлены в прямом коде, операции над кодами знаков выполняются раздельно. Поэтому представление чисел в виде знака и значения не нашло широкого применения. В то же время при помощи обратного и дополнительного кодов, используемых для представления отрицательных чисел, операция вычитания (алгебраического сложения) сводится к операции простого арифметического сложения. При этом операция сложения распространяется и на разряды знаков, рассматриваемых как разряды целой части числа. Именно поэтому для представления целых чисел со знаком применяется дополнительный код. Дополнительный код отрицательного числа формируется по следующим правилам: · модуль отрицательного числа записать в прямом коде, в неиспользуемые старшие биты записать нули; · сформировать обратный код числа, для этого нуль заменить единицей, а единицу заменить нулем; · к обратному коду числа прибавить единицу.
Например: для числа -33 в формате short
1000000000100001 прямой код 0111111111011110 обратный код +______________1 1111111111011111 дополнительный код
Для положительных чисел прямой, обратный и дополнительный коды одинаковы. Аналогично представляются целые числа в формате sbyte, short, int, long. При разработке программ на этапе выбора типа данных важно знать диапазон целых величин, которые могут храниться в n разрядах памяти. В соответствии с алгоритмом преобразования двоичных чисел в десятичные формула суммирования для n разрядов имеет вид: 20+21+22+…+2n-1 или ∑2i=2n-1. При n-битовом хранении числа в дополнительном коде первый бит выражает знак целого числа. Поэтому положительные числа представляются в диапазоне от 0 до 1*20 + 1*21 +...+ 1*2n-2 или, что то же самое, от 0 до 2n-1-1. Все другие конфигурации битов выражают отрицательные числа в диапазоне от -2n-1 до -1. Таким образом, можно сказать, что число N может храниться в n разрядах памяти, если его значение находится в диапазоне: -2n-1 <= N <= 2n-1- 1. Иными словами, диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать 1, 2, 4 или 8 байт. В табл. 2.1 приводится перечень целых типов, размер памяти для их внутреннего представления в битах, диапазон возможных значений.
В C# определены девять целочисленных типов данных: char, byte, sbyte, short, ushort, int, uint, long и ulong. Тип данных char в основном применяется для представления символов и будет описан позже в этой главе. Остальные восемь типов используются для выполнения операций с числами. В следующей таблице перечислены эти типы, а также указано количество битов, выделяемых для представления числа, и диапазон возможных значений. Таблица 2.1 Целочисленные типы
Как показано в таблице, в C# определены как знаковые, так и беззнаковые варианты целочисленных типов. Различие между ними состоит в способе интерпретации старшего бита целого числа. Если указывается знаковое целое, то компилятор будет генерировать код, в котором предполагается интерпретация старшего бита целого числа как флага знака. Если флаг знака 0, то это положительное число; если флаг знака 1, то число отрицательное. Отрицательные числа практически всегда представлены с использованием метода двоичного дополнения. В этом методе все биты числа (за исключением фл ага знака) инвертируются, затем к этому числу прибавляется единица, в завершение флагу знака задается значение 1. Знаковые целые важны для очень многих алгоритмов, но они имеют только половину абсолютной величины соответствующих беззнаковых целых. Например, запишем в двоичном представлении число типа short 32767: 01111111 11111111 Поскольку это знаковый тип, при задании старшему биту значения 1 число будет интерпретировано как -1 (если использовать метод двоичного дополнения). Но если вы объявляете его тип как ushort, то при задании старшему биту значения 1 число будет интерпретировано как 65535. Пожалуй, наиболее часто используемым целочисленным типом является int. Переменные типа int часто применяют для управления циклами, для индексации массивов и в различных математических вычислениях. При работе с целочисленными значениями, большими, чем те, которые могут быть представлены типом int, в C# используют типы uint, long, ulong, а при работе с беззнаковым целым - тип uint. Для больших значений со знаком применяют тип long, для еще больших положительных чисел (беззнаковых целых) - тип ulong. Ниже приведена программа, вычисляющая объем куба (в кубических дюймах), длина стороны которого равна 1 миле. Поскольку это значение довольно большое, для его хранения программа использует переменную типа long. /* using System; class Inches { im = 5280 * 12; ci = im * im * im; Console.WriteLine("Объем куба с длиной стороны, равной 1 миле, "+ Ниже показан результат выполнения этой программы: Объем куба с длиной стороны, равной 1 миле, Очевидно, что такой результат не может быть помещен в переменную типа int или uint. byte и sbyte - наименьшие целочисленные типы. Значение типа byte может находиться в диапазоне от 0 до 255. Переменные типа byte особенно полезны при использовании необработанных двоичных данных, таких как поток байтов данных, сгенерированный каким-либо устройством. Для небольших знаковых целых применяется тип sbyte. Представленная ниже программа использует переменную типа byte для контроля цикла for, в котором вычисляется сумма всех целых чисел, находящихся в диапазоне от 1 до 100. // Использование типа byte. using System; class Use_byte { sum = 0; Результат выполнения этой программы следующий: Сумма всех целых чисел, находящихся в диапазоне от 1 до 100, равна 5050 Поскольку в данной программе для управления циклом for используются числа от 1 до 100, находящиеся в диапазоне значений, определенных для типа byte, нет необходимости назначать тип переменной, позволяющий работать с гораздо большими числами. Для правильного назначения типа переменной и экономии системных ресурсов воспользуйтесь приведенной выше таблицей и выберите диапазон значений типа, которому удовлетворяет значение этой переменной.
МАШИННОЕ ПРЕДСТАВЛЕНИЕ БЕЗЗНАКОВЫХ ТИПОВ К беззнаковым типам в C# относятся целые типы с преставкой unsigned (беззнаковый), сокращенной до первой буквы u, а так же беззнаковое 8-битное целое - byte Формат машинного представления чисел типа byte приведен на рис. 2.2,а.
Например: 1). Машинное представление числа 45: 45=25+23+22+20 = 00101101 2). Машинное представление границ диапазона допустимых значений чисел 0 и 255:
0: 00000000; 255: 11111111. а) тип byte
7 0
б) тип ushort (так же char – 16 битовый символ Unicode)
Рис. 2.2. Формат машинного представления беззнаковых чисел
Формат машинного представления чисел типа ushort приведен на рис. 2.2, б.
Например: 1). Машинное представление числа 258: 257=28+21 = 00000001 00000010. 2). Машинное представление границ: 0: 00000000 00000000; 65535: 11111111 11111111.
МАШИННОЕ ПРЕДСТАВЛЕНИЕ ЧИСЕЛ СО ЗНАКОМ. Для представления чисел со знаком определены следующие типы SBYTE, SHORT, INT, LONG. В приведенных типах числа хранятся в дополнительном коде. Напомним, что дополнительный код положительных чисел совпадает с прямым кодом. Формат машинного представления чисел знакового целого типа приведен на рис. 2.3, а, где s - знаковый разряд числа. Для положительных чисел s = 0, для отрицательных s = 1.
Например: машинное представление чисел в формате SBYTE: 1). 0: 00000000; 2). +127: 01111111; 3). -128: 10000000. Формат машинного представления чисел типа SHORT приведен на рис. 2.3, б.
Например: 1). +32765: 11111101 01111111; 2). -32765: 00000011 10000000; 3). -47: 11010001 11111111. Машинное представление границ диапазона допустимых значений: 4). -32768: 00000000 10000000; 5). 32767: 11111111 01111111. Формат машинного представления чисел типа LONG приведен на рис. 2.3, в. Например: 1). +89 01011001 00000000 00000000 00000000; 2). -89 10100111 11111111 11111111 11111111.
Рис. 2.3. Формат машинного представления чисел со знаком
На рис 2.3 s - знаковый бит числа. При этом, если s = 0, то число положительное, если s = 1 - число отрицательное. Цифры определяют номера разрядов памяти.
Дата добавления: 2014-01-07; Просмотров: 465; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |