Студопедия

КАТЕГОРИИ:


Архитектура-(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 в двоичном виде можно представить так:

 

Число Знаковый бит Величина
+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 Целочисленные типы

Тип Количество битов Диапазон значений
byte   От 0 до 255
sbyte   От -128 до 127
short   От -32768 до 32767
ushort   От 0 до 65535
int   От -2147483648 до 2147483647
uint   От 0 до 4294967295
long   От -9223372036854775808 до 9223372036854775807
ulong   От 0 до 18446774073709551615

Как показано в таблице, в 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.

/*
Программа вычисляет объем куба (в кубических дюймах),
длина стороны которого равна 1 миле.
(Для справки: в одной миле 5280 футов, в одном футе 12 дюймов.
*/

using System;

class Inches {
public static void Main() {
long ci;
long im;

im = 5280 * 12;

ci = im * im * im;

Console.WriteLine("Объем куба с длиной стороны, равной 1 миле, "+
"\nравен "+ ci +" кубических дюймов.");
}
}

Ниже показан результат выполнения этой программы:

Объем куба с длиной стороны, равной 1 миле,
равен 254358061056000 кубических дюймов.

Очевидно, что такой результат не может быть помещен в переменную типа int или uint.

byte и sbyte - наименьшие целочисленные типы. Значение типа byte может находиться в диапазоне от 0 до 255. Переменные типа byte особенно полезны при использовании необработанных двоичных данных, таких как поток байтов данных, сгенерированный каким-либо устройством. Для небольших знаковых целых применяется тип sbyte. Представленная ниже программа использует переменную типа byte для контроля цикла for, в котором вычисляется сумма всех целых чисел, находящихся в диапазоне от 1 до 100.

// Использование типа byte.

using System;

class Use_byte {
public static void Main() {
byte x;
int sum;

sum = 0;
for(x = 1; x <= 100; x++)
sum = sum + x;
Console.WriteLine("Сумма всех целых чисел, находящихся "+
"в диапазоне от 1 до 100, \nравна " + sum);
}
}

Результат выполнения этой программы следующий:

Сумма всех целых чисел, находящихся в диапазоне от 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.

 

a)sbyte

Рис. 2.3. Формат машинного представления чисел со знаком

 

На рис 2.3 s - знаковый бит числа. При этом, если s = 0, то число положительное, если s = 1 - число отрицательное. Цифры определяют номера разрядов памяти.

 

 

<== предыдущая лекция | следующая лекция ==>
Фундаментальные типы ДАННЫХ | Перевод чисел из одной системы счисления в другую. При переводе целого числа (целой части числа) из одной системы счисления в другую исходное число (или целую часть) надо разделить на основание системы
Поделиться с друзьями:


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


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



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




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